产品上多个选项的数据库结构

时间:2011-12-06 11:23:33

标签: mysql database

我的数据库(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 [...]

如何为此设计数据库结构? 我尝试了几种方法,但没有一种方法是好的。如果选项的数量是静态的,那么每个选项都可以拥有自己的表,但这不是一个好的解决方案。

2 个答案:

答案 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 

在您的设计中,您无法确定哪个选项属于哪个产品实例。如果查看表格选项值,则无法将选项组合在一起。