我有一个category
表和一个sub_cat
表,其中包含一个名为parent_id
的外键,parent_id
应该引用category
和{{1}本身。
sub_cat
注意:当我们有多个子类别时,这些表非常有用(例如:category
----------
id
name
sub_cat
----------
id
name
parent_id
,category=computer
,sub_cat=software
或只有类别(取决于类别类型))和我希望每个sub_cat=programming
都有parent_id
,并且知道它引用了什么?
答案 0 :(得分:0)
使用一张桌子,而不是两张桌子。
您拥有的是标准的简单层次结构。此结构中的每个“节点”都是相同的一般事物,只有父节点/子节点。考虑一下这样的表:
Category
----------
ID (PK)
ParentID (FK, null)
Name (varchar, not null)
在这种情况下,ParentID
是返回此同一个表的密钥ID
的外键。因此,任何给定的类别都有一个选项“父”类别。如果它没有父级,则它是顶级类别。如果它有父母,则它是该父母的子类别。
基本上,“类别”和“子类别”之间没有语义差异。它们都是类别实体。试图将它们分开是造成混乱的原因。将它们保持在一起,并为类别选择一个可选的“父”值。