我的数据库(MySQL)中有产品。 我的价格基于我的产品的不同选项组合。 我有以下数据:
产品
prodID | prodName
1 | Ball
选项
optionID | optionName | prodID
1 | color | 1
2 | size | 1
3 | material | 1
OPTIONVALUES
ovID | optionID | ovValue
1 | 1 | red
2 | 1 | blue
3 | 2 | small
4 | 2 | big
5 | 3 | wood
6 | 3 | glass
我希望有这样的价格:
红色小木球 - 13美元 红色小玻璃球 - 14 红色大木球 - 16 红色大玻璃球 - 17 蓝色小木球 - 12.5 [...]如何为此设计数据库结构? 我尝试了几种方法,但没有一种方法是好的。如果选项的数量是静态的,那么每个选项都可以拥有自己的表,但这不是一个好的解决方案。
答案 0 :(得分:1)
我喜欢你已有的东西。如果您希望它完全灵活,我猜您会这样做,我会做以下事情:
再添加两个表。
Product_Instance
instanceID | prodID | price
1 | 1 | 13
Product_Instance_Options
instanceID | ovID
1 | 1
1 | 3
1 | 6
通过这种方式,您可以为它们定义所有可能的组合和价格。设置所有价格可能需要付出很多努力,但是如果你不能计算它们(比如glass = + 2 $,small = 2 $ / big = 4 $),那么你可以这样做。
答案 1 :(得分:1)
这样的事情怎么样:
<强> productTypes 强>
prodID | prodName
1 | Ball
2 | Car
<强> productInstances 强>
prodInstanceID | prodID | Prize
1 | 1 | $19
2 | 1 | $50
3 | 2 | $8
<强>属性强>
propertyID | propertyName
1 | color
2 | size
3 | material
<强> propertiesValues 强>
pvID |propertyID | propertyName
1 | 1 | red
2 | 1 | blue
3 | 2 | small
4 | 2 | medium
5 | 2 | large
6 | 3 | wood
7 | 3 | glass
<强> productProperties 强>
ppID | prodInstanceID | pvID
1 | 1 | 1
2 | 1 | 3
3 | 1 | 6
4 | 2 | 2
5 | 2 | 4
6 | 2 | 7
7 | 3 | 1
8 | 3 | 3
9 | 3 | 6
在您的设计中,您无法确定哪个选项属于哪个产品实例。如果查看表格选项值,则无法将选项组合在一起。