【问题标题】:Database schema for multiple category/product relationship多类别/产品关系的数据库模式
【发布时间】:2011-02-09 09:40:28
【问题描述】:

我想为具有类别/子类别管理的电子商务应用程序设计一个数据库。请建议一个数据库架构,我们可以在其中创建类别和子类别并将产品添加到这些类别中。 每个产品可以有多个类别,我们可以使用布尔数据库查询选择属于多个类别的产品

谢谢

【问题讨论】:

  • 到目前为止你有什么想法?

标签: php mysql database-design


【解决方案1】:

对于任何级别的类别和子类别,以及属于多个类别的产品,我将从:

Categories:
    category_id
    parent_category_id foreign key (Categories.category_id)
    ... other category information ...
    primary key (category_id)
Products:
    product_id
    ... other product information ...
    primary key (product_id_id)
ProductCategories:
    product_id foreign key (Products.product_id)
    category_id foreign key (Categories.category_id)
    primary key (category_id,product_id)
    index (product_id)

通过这种方式,您可以实现类别层次结构以及产品和类别之间的多对多关系的目标。


您可以使用如下查询选择属于多个类别(例如 3 和 4)的产品 ID:

select a.product_id
from Products a, Products b
where a.product_id  = b.product_id
  and a.category_id = 3
  and b.category_id = 4

【讨论】:

  • 如何获取具有两个 category_id 例如 3 和 4 的产品?
  • 查看更新:老派方式:从产品 a 中选择 a.product_id,产品 b 其中 a.product_id = b.product_id and a.category_id = 3 and b.category_id = 4。没有怀疑一种更“现代”的方式,尽管体面的 DBMS 应该同样优化它们。
【解决方案2】:

最好使用连接表来解决这个问题。也就是说,您有一个products 表和一个categories 表,每个表都有一个主键。然后,创建第三个表,即连接表。它有 3 列:主键 category_idproduct_id。然后,当您想要在产品和类别之间添加关系时,您可以在关联表中插入一行,其中包含相关的 category_idproduct_id。然后,您可以将这 3 个表与连接一起使用来显示关系。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-07
    • 1970-01-01
    • 2017-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多