Mysql 产品上多个选项的数据库结构
我的数据库(MySQL)中有产品。 我的价格是基于我的产品的不同选择组合而定的。 我有以下数据: 产品Mysql 产品上多个选项的数据库结构,mysql,database,Mysql,Database,我的数据库(MySQL)中有产品。 我的价格是基于我的产品的不同选择组合而定的。 我有以下数据: 产品 prodID | prodName 1 | Ball optionID | optionName | prodID 1 | color | 1 2 | size | 1 3 | material | 1 ovID | optionID | ovValue 1 | 1 | red 2 |
prodID | prodName
1 | Ball
optionID | optionName | prodID
1 | color | 1
2 | size | 1
3 | material | 1
ovID | optionID | ovValue
1 | 1 | red
2 | 1 | blue
3 | 2 | small
4 | 2 | big
5 | 3 | wood
6 | 3 | glass
选项
prodID | prodName
1 | Ball
optionID | optionName | prodID
1 | color | 1
2 | size | 1
3 | material | 1
ovID | optionID | ovValue
1 | 1 | red
2 | 1 | blue
3 | 2 | small
4 | 2 | big
5 | 3 | wood
6 | 3 | glass
选项值
prodID | prodName
1 | Ball
optionID | optionName | prodID
1 | color | 1
2 | size | 1
3 | material | 1
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
[……]
我如何为此设计数据库结构?
我试过好几种方法,但没有一种是好的。如果选项的数量是静态的,那么每个选项都可以有自己的表,但这不是一个好的解决方案。我喜欢您已经有的。如果你想让它像我想的那样完全灵活,我会做以下几点: 再添加两个表 产品实例
instanceID | prodID | price
1 | 1 | 13
产品\实例\选项
instanceID | ovID
1 | 1
1 | 3
1 | 6
通过这种方式,您可以为它们定义所有可能的组合和价格。设置所有的价格可能需要大量的工作,但是如果你不能计算它们(比如玻璃=2$,小=2$/大=4$),你会得到这个,不管你怎么做。像这样的东西怎么样: 产品类型
prodID | prodName
1 | Ball
2 | Car
prodInstanceID | prodID | Prize
1 | 1 | $19
2 | 1 | $50
3 | 2 | $8
propertyID | propertyName
1 | color
2 | size
3 | material
pvID |propertyID | propertyName
1 | 1 | red
2 | 1 | blue
3 | 2 | small
4 | 2 | medium
5 | 2 | large
6 | 3 | wood
7 | 3 | glass
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
productInstances
prodID | prodName
1 | Ball
2 | Car
prodInstanceID | prodID | Prize
1 | 1 | $19
2 | 1 | $50
3 | 2 | $8
propertyID | propertyName
1 | color
2 | size
3 | material
pvID |propertyID | propertyName
1 | 1 | red
2 | 1 | blue
3 | 2 | small
4 | 2 | medium
5 | 2 | large
6 | 3 | wood
7 | 3 | glass
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
属性
prodID | prodName
1 | Ball
2 | Car
prodInstanceID | prodID | Prize
1 | 1 | $19
2 | 1 | $50
3 | 2 | $8
propertyID | propertyName
1 | color
2 | size
3 | material
pvID |propertyID | propertyName
1 | 1 | red
2 | 1 | blue
3 | 2 | small
4 | 2 | medium
5 | 2 | large
6 | 3 | wood
7 | 3 | glass
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
属性值
prodID | prodName
1 | Ball
2 | Car
prodInstanceID | prodID | Prize
1 | 1 | $19
2 | 1 | $50
3 | 2 | $8
propertyID | propertyName
1 | color
2 | size
3 | material
pvID |propertyID | propertyName
1 | 1 | red
2 | 1 | blue
3 | 2 | small
4 | 2 | medium
5 | 2 | large
6 | 3 | wood
7 | 3 | glass
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
产品属性
prodID | prodName
1 | Ball
2 | Car
prodInstanceID | prodID | Prize
1 | 1 | $19
2 | 1 | $50
3 | 2 | $8
propertyID | propertyName
1 | color
2 | size
3 | material
pvID |propertyID | propertyName
1 | 1 | red
2 | 1 | blue
3 | 2 | small
4 | 2 | medium
5 | 2 | large
6 | 3 | wood
7 | 3 | glass
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
在您的设计中,您无法确定哪个选项属于哪个产品实例。如果查看表optionvalues,则无法将选项组合在一起。您必须为每个产品的每个实例插入所有值(如红色/小值)。您可能会在数据库中找到数百或数千次“small”一词。这是冗余=不好。无论如何,对于一个紧密的appropiation@Flo,你说得对。我修改了我的答案。将价格移动到productinstance并创建了propertyvalues表。编辑:事实上,现在我的答案和你的答案一样。jea,现在你的答案和我的答案几乎一样,只是增加了一个主键。(这不是必需的)您如何对此进行查询以获得给定选项数组的价格?回答我上面的评论问题: