1

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

你是在正确的轨道上,与自己的关系的最佳途径。如果您为每个分类使用一列;你被限制在最大限度。我会用'0'作为顶层,那么你不需要允许空值。你可以通过在'category_id'中计数它的'id'来获得子类别的数量 – BitAccesser

+0

@BitAccesser 0,谢谢 –

回答

0

研究发现,Nested Set Model是处理分层数据 Categories model

Categories table

0

我认为如果我们谈论的SQL它应该看起来像这样...

Table(object): Electronics&Computers & Office 
Table(object):Musical Instruments 
    Guitars 
Table(object):Monitors 
Table(object):Computers & Tablets 
    Tablets 
    Laptops 
    Desktops 
    Table(object):Desktops 
     Gaming 
     Home 
     Work 

共5桌(对象)。再it'i只是我的观点。 谢尔盖

+0

的好主意并且如果你想要第五个子类别?通过自引用,您可以拥有无​​限数量的子类别,而无需更改设计。 – BitAccesser

相关问题