产品构建器的SQL DB设计

时间:2012-08-28 21:10:03

标签: sql database-design

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

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

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

产品 - 现有产品表 Ex:ProductA

ParentProducts - idParentProduct 例如:ProductB

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

ParentProduct_Attribute_Values - idAttribute,idValue,Value Ex:10“

ParentProduct_Attribute_ChildProducts - idAttribute,idChildProduct,Type(Reg。产品/子产品) Ex:ChildProductA,ProductA

ChildProducts - idChildProduct

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

例如,我有一件家具,ProductB。 ProductB有高度和旋钮。高度的选择是10“,12”(值),旋钮的选择是ChildProductA,ProductA(产品) - 每个来自不同的表。 ChildProductA是一个儿童产品,而ProductA是一个常规产品,所以同样是两个独立的表。

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

希望我很清楚。

谢谢。

2 个答案:

答案 0 :(得分:0)

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

ParentProduct_Attribute_Values - idAttribute, idValue, Value Ex: 10" 

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

答案 1 :(得分: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字段进行的。如果需要,您可以在数据库外的应用程序中进行其他检查和/或验证。