这个数据库设计好吗?

时间:2016-11-19 08:39:15

标签: sql sql-server database

我正在为地毯公司开发一个mvc应用程序。地毯的价格取决于颜色组合和尺寸。所以为了模拟这个场景我使用了2个表。 1.Carpets。 2.CarpetVarients。(适用于各种颜色和大小的组合)。

在CarpetVarients表中,我正在考虑创建列" Colors"," Size"和"价格" (沿着其他栏目)。 Colors列将存储逗号分隔的颜色(如Cream,Red,)。

这种设计有效吗?或者我应该把每个组合都变成不同的地毯。

3 个答案:

答案 0 :(得分:1)

通常,将事物存储为分隔字符串并不是一个好主意(除非你在谈论有多种颜色的地毯,在这种情况下,事情可能会有所不同)。最好为每种颜色/尺寸组合添加一行。

考虑将Carpet称为Style,然后Carpet表格可以StyleColour和{ {1}}。

e.g。

Size

e.g。设计回答"告诉我所有将xxx作为颜色的地毯。"

Style
StyleID     StyleName   Description
1           'Modern'    'Striped'
2           'Rustic'    'Checks'

Carpet
CarpetID  StyleID  Colour           Size    Price
1         1        'Red-Green'      'Small' '£'
2         1        'Orange-Teal'    'Large' '£££'
3         2        'Violet-Magenta' 'Large' '£££££'

答案 1 :(得分:0)

您应该按如下方式创建表格:

Carpet
CarpetID (PK), CarpetName, Description
   1               abc      green-yellow 2*3

CarpetVarient
StyleID (FK), Color, Size, Price
   1           green  2     100
   1           yellow 3     100

因此地毯可以是多种样式,地毯的总price将是基于StyleId的价格总和。例如,名为 abc 的地毯总计为200

答案 2 :(得分:0)

您也可以执行类似

的操作
Carpet:
CarpetId   Carpet_PartNumber  Color   Size   parentID  Price
1                AB12          NULL    NULL    NULL    NULL
2                AB23          Green   12inch   1      100

通过这种方式,您可以将每个地毯都作为个人产品。 注意(对于颜色和大小,您可以使用LOOKUP表)