具有不同属性的多类产品的数据库模式

Database schema for multiple category of product with different attributes

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

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

问题是:

来自特定类别的产品具有一组特定的属性。例如,一台计算机有 Ram、CPU、屏幕尺寸...等 一件衬衫有尺码、颜色...等等

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

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

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

"best practice"是什么方式?

这是我所做的一个例子:

product (idproduct, name,price,...(other attributes))
类别(idcat、名称、idParentCategory)
父类别(idPcat)
PC(idPc,内存,CPU,屏幕大小..等)
衬衫(id衬衫,尺码,颜色)
裤子(idPant,waist,color)

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

有更好的解决方案吗?

提前感谢您的帮助

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

要将产品映射到它们的类别,您只需 table 与两个外国 PK: 产品类别(idprodFK,idcatFK)

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

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

There are attributes common to all products (e.g. price and stock etc.).

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

But how do I manage attributes specific to each product within its category? ... if I wanted to sell books in my website I would need to add a books table

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