我们正在添加允许产品构建的功能。
例如,用户可以配置不同的属性,可以是普通值(高度,颜色等)或现有产品(可以选择一件家具的旋钮)。
我现在正在构建数据库设计,我正在寻找建议。我想出的是以下内容。
产品 - 现有产品表 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是一个常规产品,所以同样是两个独立的表。
对此有任何意见吗?不同的想法?
希望我很清楚。
谢谢。
答案 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
表格中包含value
和idProduct
字段NULL
。如果设置了value
,则它是一个简单的值。如果设置了idProduct
,则它是一个产品,它应该是Products
的外键。
常规产品,父产品和儿童产品之间的类型差异是通过type
中的Products
字段进行的。如果需要,您可以在数据库外的应用程序中进行其他检查和/或验证。