代码之家  ›  专栏  ›  技术社区  ›  AbdulAziz Nurov

创建多类别项目数据库结构的最佳方法

  •  1
  • AbdulAziz Nurov  · 技术社区  · 7 年前

    category 有很多 subcategories 。一个只能有一个子类别,而另一个可以有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 回复  |  直到 7 年前
        1
  •  1
  •   AbdulAziz Nurov    7 年前

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

    Categories table

        2
  •  0
  •   Sergei Mashkov    7 年前

    在我看来,如果我们谈论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个表(对象)。再说一遍,这只是我的观点。