【问题标题】:Database schema for multiple category of product with different attributes具有不同属性的多类别产品的数据库模式
【发布时间】:2017-03-02 17:21:02
【问题描述】:

我搜索了整个 stackoverflow,但似乎找不到我的问题的答案。

此问题与电子商务网站有关

问题出在这里:

特定类别的产品具有一组特定的属性。例如,一台计算机有内存、CPU、屏幕尺寸...等 一件衬衫有 Size,Color ...等

所有产品都有一些共同的属性(例如价格和库存等)。

但我如何管理特定于其类别中每个产品的属性?

起初我为产品的每个类别制作了一个表格,其中列出了所有属性,但后来我遇到了过滤每个产品及其属性的问题。我确信这不是一个好主意,因为我必须在获取新类别时创建一个新表。例如,如果我想在我的网站上销售书籍,我需要添加一个 books 表

什么是“最佳实践”?

这是我所做的一个例子:

产品(idproduct、名称、价格、...(其他属性))
类别 (idcat,name,idParentCategory)
ParentCategory(idPcat)
PC(idPc,Ram,CPU,screenSize..etc)
衬衫(idShirt,尺码,颜色)
裤子(idPant,腰围,颜色)

这里的问题是我无法在产品表及其类别之间建立联系以提取属性。

有没有更好的解决方案?

提前感谢您的帮助

【问题讨论】:

  • 关注 EAV 标签进行类似讨论

标签: mysql database-design e-commerce entity-attribute-value


【解决方案1】:

所有产品都有一些共同的属性(例如价格和库存等)。

为此使用适当的现实生活密钥创建一个表,例如EAN(考虑为此使用第三方数据源)。

但是我如何管理特定于其类别中每个产品的属性? ...如果我想在我的网站上卖书,我需要添加一个书架

是的,特定于书籍的属性会放在这里。请记住创建对“所有产品共有的属性”表的引用,例如确保 EAN 对应于有效的ISBN。还要考虑到某些书籍属性可能与其他类似产品共有,因此您可以在数据库中建模各种子类型。

【讨论】:

    【解决方案2】:

    如果我很好地理解了您的问题,解决您的问题的一种方法是将属性映射到类别表,因为它们是特定于类别而不是特定于项目的。 这样,您将拥有: 产品(idproduct,名称,价格...(类别属性值)) 类别(idcat,name,idParentCategory,(类别属性))

    要将产品映射到它们的类别,您只需要一个包含两个外国 PK 的表: productOfCategory(idprodFK,idcatFK)

    这将允许您将产品映射到相应的类别并将产品的值验证到类别的属性。

    或者您将值数组保留在 productOfCategory 关系中。 例如,对于计算机产品,因此属于计算机类别,您将拥有 productOfCategory(ComputerProductID,ComputersCategoryID,"3.0‌​GHz,6GB Ram,.....")

    【讨论】:

    • 在产品表中添加类别属性值是什么意思?能给我举个例子吗
    • 按照我的看法,您有两个选择。要么在产品条目中保留一组值,要么在 productOfCategory 关系中保留一组值。例如,对于计算机产品,因此属于计算机类别,您将拥有 productOfCategory(ComputerProductID,ComputersCategoryID,"3.0GHz,6GB Ram,.....")
    • 感谢您的帮助先生,这对我很有用
    • 没问题,伙计。如果您可以投票并标记为答案,我将不胜感激
    • “值数组” - 我不认为 mySQL 对此类数据结构有适当的支持。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-07
    • 1970-01-01
    • 2011-02-09
    • 2015-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多