制作多个类别项目数据库结构的最佳方法

时间:2017-07-14 07:08:49

标签: mysql database database-design relational-database software-design

想象一下拥有各种不同产品的商店。每个产品都有categorysubcategories。一个可以只有一个子类别,而另一个可以有3个子类别。亚马逊的例子:

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来自他们的数据会很困难,因为我们不知道一个项目有多少个子类别。

这些方法是否正确?我应该使用哪一个或者有更好的方法吗?对不起,如果这是无关紧要的问题。谢谢!

2 个答案:

答案 0 :(得分:1)

发现Nested Set Model是处理分层数据的最佳方法 Categories model

Categories table

答案 1 :(得分: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个表格(对象)。再说一遍,我只是我的观点。 谢尔盖