Database design 在数据库中存储类别和产品类型的最佳方法

Database design 在数据库中存储类别和产品类型的最佳方法,database-design,Database Design,我有三种产品类型。以后会更多。 我还有产品类别。类别不能有多个产品类型。那么,我应该如何保持类别 1.id |家长| id |姓名 我将产品类型设置为根类别。 例如: Electronic > computer > laptop Electronic的父id将为0,因此将链接下一个类别 id |父项|产品|类型|名称 我将从产品类型获取电子版本,计算机的父id将为0 哪种方式更好?对于类别: ID | Name | Parent_ID (父ID用于类别树) 对于产品: ID |

我有三种产品类型。以后会更多。 我还有产品类别。类别不能有多个产品类型。那么,我应该如何保持类别

1.
id |家长| id |姓名

我将产品类型设置为根类别。
例如:

Electronic > computer > laptop 
Electronic的父id将为0,因此将链接下一个类别

  • id |父项|产品|类型|名称
  • 我将从产品类型获取电子版本,计算机的父id将为0

    哪种方式更好?

    对于类别:

    ID | Name | Parent_ID
    
    (父ID用于类别树)

    对于产品:

    ID | Category_ID | Name | Description | Other
    
    假设类别树是这样的

    Computers [ID: 1 | Parent: 0]
     |-Laptops [ID: 2 | Parent: 1]
     |-Desktop [ID: 3 | Parent: 1]
     |-Printers [ID: 4 | Parent: 1]
     |  |-Brand #1 [ID: 5 | Parent: 4]
     |  |-Brand #2 [ID: 6 | Parent: 4]
     |-Other stuff [ID: 7 | Parent: 1]
    
    然后,如果您想显示来自(例如,
    Printers
    )的所有产品,只需执行一个递归,从
    Printers
    类别及其子类别获取所有项目

    TL;博士
    第一种方法更好

    您的数据库是这样的吗

    表:产品类型

    id   | parent_id | name
    -------------------------------
    1    | null      | Electronics
    ------------------------------- 
    2    | 1         | Computer
    -------------------------------
    3    | 2         | Laptop
    -------------------------------
    
    如果是这样,为什么需要进一步的表来获得结果?
    当您需要一个新类别时,只需添加一个新的parrent及其子项。

    正如您所提到的,您现在有三种产品类型,以后可以增加产品类型,您需要一个产品类型表-

    Product_type
    ------------
    1> product_type_id - Primary Key
    
    2> product_type_name
    
    现在您有了categories表,它将是分层的类别数据,并且与product_type表有一对多的关系(正如您所说的类别不能有多个产品类型),因此您的表设计如下

    Product_categories
    ------------------
    
    1> product_cat_id - Primary key
    
    2> product_type_desc 
    
    3> parent_product_type_id (for hierarchical relationship)
    
    4> product_type_id - foreign key to **Product_type** table.
    
    您可以在此详细说明任何进一步的要求,以便我们能够帮助您


    谢谢

    我建议使用嵌套集设计,而不是您当前使用的邻接列表设计

    尽管它确实可以工作,但如果遇到性能问题,对嵌套集执行单个查询可以产生比从邻接列表(需要多次数据库调用)中更多的关于类别的信息

    在过去的许多应用程序中,我都使用过,而且效果非常好

    TL;医生:

    邻接列表

    • 优点:易于实现
    • 缺点:需要递归数据库调用来确定树中的深度和位置等信息
    嵌套集

    • 优点:可以在一次查询中生成有关数据的大部分信息
    • 缺点:难以实施