我有一个如下所示的表:设计具有层次结构/子类别的SQL表
ID |关键字|类别|子分类|子子类别|子子类别
是否需要将它分成两个表格(关键字表格和具有父级ID的类别表格) 如果一个关键字只能属于一个类别,子类别...等等这意味着没有重复。是否仍然需要将其拆分?
我有一个如下所示的表:设计具有层次结构/子类别的SQL表
ID |关键字|类别|子分类|子子类别|子子类别
是否需要将它分成两个表格(关键字表格和具有父级ID的类别表格) 如果一个关键字只能属于一个类别,子类别...等等这意味着没有重复。是否仍然需要将其拆分?
您只需要一张表来表示1-1映射。为了表示一对多或多对映射,您应该使用多个表。
如果关键字只能对应一个类别/子类别/子子类,你当前的布局应该罚款。
一个告诫:如果您想根据关键字进行搜索,可能会有性能提升分离表。执行整数搜索要快得多。
在另一个表粗存储关键字值的讨论对应于另一个表中存储的国家的名称(其大多是静态的)的this discussion。使用另一个表格的一些关键优势可能是(语言)语言独立性,快速搜索以及稍后易于更新等。
我会使用这样的两个表。
Categories
-------------------
PK,FK1 | CategoryID
| Keyword
| Category
SubCategories
--------------------
PK,FK1 | CategoryID
PK,FK1 | SubCategoryID
这可能是有意义的它分裂如果你希望重命名或稍后重新安排类别:
权衡两者的缺点和优点,然后作出decision.m
为什么不只是添加PARENTID列和FK的PK?
我会与每个外键从分类表来做到这一点在两个表:
Keywords
id (PK)
keyword
category_id (FK)
Categories
category_id (PK)
category
parent_category_id (FK)
的数据在分类表看起来像:
category_id category parent_category_id
1 Food null
2 meat 1
3 organic 1
4 fruit 3
和数据关键字表如下所示:
id keyword category_id
1 grapes 4
2 chicken 2
这太好了!谢谢。基于其他答案,我会分解它的性能和遵循你的设计。 – chips 2010-01-24 00:08:04