想象一下,各种不同产品的商店。每个产品有一个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,谢谢 –