想象一下,各種不同產品的商店。每個產品有一個category
與許多subcategories
。一個可以只有一個子類別,而另一個可以有三個子類別。從亞馬遜的例子:製作多個類別物品數據庫結構的最佳方式
Electronics, Computers & Office
Musical Instruments
Guitars
Electronic Guitar
Acoustic Guitar
Monitors
Computers & Tablets
Tablets
Laptops
Desktops
Gaming
Home
Work
所以:顯示器有一類一級
Electronics, Computers & Office > Monitors
片二類水平
Electronics, Computers & Office > Computers & Tablets > Tablets
而且電子吉他三個類別水平
Electronics, Computers & Office > Musical Instruments > Guitars > Electronic Guitar
的問題是,什麼是實現這一結構的最好辦法(考慮靈活性,維護,無障礙設施等)?某處我看到了這樣的結構:
Categories table
-------------------------------------------------------
| id | title | caregoty_id |
-------------------------------------------------------
| 1 | Electronics, Computers & Office | null |
| 2 | Musical Instruments | 1 |
| 3 | Guitars | 2 |
| 4 | Electronic Guitar | 3 |
| 5 | Acoustic Guitar | 3 |
| 6 | Monitors | 1 |
| 7 | Computers & Tablets | 1 |
| 8 | Tablets | 7 |
| 9 | Laptops | 7 |
-------------------------------------------------------
正如你所看到的,只有一張表與它自己有關係。我不知道這是否是正確的做法。我應該去與這個想法,或者我應該做更多的先發制人的方式,通過使Categories
表如:categores1, categories2, categories3 ...
他們有One To Many
關係。更多的子類別我將擁有更多的表格。但是我認爲SELECT
的數據很難實現,因爲我們不知道一個項目有多少個子類別。
這些方法是正確的嗎?我應該使用哪一個或有更好的方法來做到這一點?對不起,如果這是不相關的問題。謝謝!
你是在正確的軌道上,與自己的關係的最佳途徑。如果您爲每個分類使用一列;你被限制在最大限度。我會用'0'作爲頂層,那麼你不需要允許空值。你可以通過在'category_id'中計數它的'id'來獲得子類別的數量 – BitAccesser
@BitAccesser 0,謝謝 –