我有一個如下所示的表:設計具有層次結構/子類別的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