0

我们正在添加功能以允许产品构建。

例如,用户可以配置不同的属性,这些属性可以是普通值(高度、颜色等)或现有产品(可以为一件家具选择旋钮)。

我现在正在构建数据库设计,我正在寻找建议。我想出的是以下内容。

产品- 现有产品表例如:ProductA

ParentProducts - idParentProduct例如:ProductB

ParentProduct_Attributes - idParentProduct、idAttribute、类型(产品/值)例如:高度、旋钮

ParentProduct_Attribute_Values - idAttribute、idValue、值例如:10"

ParentProduct_Attribute_ChildProducts - idAttribute、idChildProduct、类型(注册产品/子产品)例如:ChildProductA、ProductA

ChildProducts - idChildProduct

这似乎是获取实际属性值的很多步骤。

例如,我有一件家具 ProductB。ProductB 有高​​度和旋钮。高度选项为 10"、12"(值),旋钮选项为 ChildProductA、ProductA(产品)——每个选项来自不同的表。ChildProductA 是子产品,而 ProductA 是常规产品,所以还是两个单独的表。

对此有任何意见吗?不同的想法?

希望我很清楚。

谢谢你。

4

2 回答 2

0
ParentProduct_Attributes - idParentProduct, idAttribute, Type (Product/Value) Ex: Height, Knob

ParentProduct_Attribute_Values - idAttribute, idValue, Value Ex: 10" 

而不是为值(ParentProduct_Attribute_Values)创建一个单独的表,它应该在一个表中。非规范化有助于在某些情况下加快查询。因为每个查询 Select values table 都会减少一个连接。

于 2012-08-28T21:16:05.967 回答
0

我建议采用以下结构:

Products - idProduct, type (Regular / Parent / Child)
Product_Attributes - idAttribute, idProduct
Product_Attributes_Values - idValue, idAttribute, value, idProduct

这样你就只剩下3张桌子了。该Product_Attributes_Values表具有字段valueidProduct并且都可以NULL。如果value设置了,那么它是一个简单的值。如果idProduct设置,那么它是一个产品,它应该是一个外键Products

常规产品、父产品和子产品之间的类型区分是通过 中的type字段进行的Products。如果需要,您可以在数据库之外的应用程序中进行额外的检查和/或验证。

于 2012-08-28T22:08:44.803 回答