[英]Categories and Subcategories Table Structure - mysql
管理員可以創建多個類別和子類別。
例如什么管理員可以:
cat1 cat2
->sub1 ->sub1
->sub2 ->sub1_1
->sub3
->sub3_1
->sub3_2
->sub3_2_1
->sub3_2_2
->sub4
sub4_1
-sub5
我不知道什么是最好的選擇? 我應該一張桌子還是兩張桌子?
這就是我所知道的:
id title parent_cat_id
1 cat1 0
2 sub1 1
3 sub2 1
3 sub3 1
4 sub3_1 3
5 sub3_2 3
6 sub3_2_1 5
7 sub3_2_2 5
...
類別和子類別都只是邏輯上的“類別”,因此除非您的設計有特定要求,否則無需實現多個物理表(盡管我現在不能想到一個...)。
另外,不需要為層次結構中的每個級別都專門設計一個結構。 您只需要一個表,就可以在每個“類別”(或“子類別”)級別將具有自引用聯接的表返回到父級。
在此示例中,我假設您的類別(或子類別)可能包含以下元素:
// categories table
category_id
category_name
element
parent_category_id
該解決方案很優雅,可以在不更改表的情況下擴展層次結構。
頂級類別的DML使用謂詞“ parent_category_id IS NULL”進行。
使用謂詞“ parent_category_id ='無論父類別ID是什么”來制作用於較低級別類別(或子類別)的DML。
干杯斯科特
PS我沒有足夠的代表來響應目錄對Sherif的回答,我可能(可能讀到了)缺少一些東西,但是也可以用單個表實現修改后的預遍歷(或嵌套集)。 方法和與鄰接表的比較在本文檔中有很好的描述
我確實同意Sherif描述的每種方法的利弊。
最好是一個相對術語,但是我們當然可以探索在關系DBMS中存儲分層數據結構的可用解決方案的取舍。 關系數據庫往往是平面結構,因為它們通常被歸一化為二維表,由有趣的列組成。 這使得嵌套結構的想法很難存儲在這樣的數據庫中。
有兩種常見的方法將這種類型的數據存儲在關系數據庫中。 具體來說,作為鄰接表 ,或使用修改的預遍歷 。
現在,你的情況而言,這並不重要,如果你有title
中存儲你的表列id
和parent_id
,因為你的主鍵完全取決於parent_id
。
鄰接表方法與您在問題中說明的方法類似。 您不需要兩個表來執行此操作,因為您使用id
和parent_id
字段作為鄰接表來構成和分解結構。
預先遍歷確實需要使用兩個表(一個用於存儲案例名稱或title
,另一個用於存儲父級與其子級之間的關系)。 而不是存儲的id
,並parent_id
每一行中,你需要存儲的left
和right
的每個父節點的子節點。
categories table ---------------- id title 1 cat1 2 subcat1_1 3 subcat1_2 4 subcat1_2_1 Relationship table ------------------ parent_id left right ------------------------------ 1 2 3 3 4 NULL
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.