推荐/建议这个表设计....

时间:2011-05-02 08:44:33

标签: sql database-design database-schema

我这里有三张桌子.... 一个是菜单,第二个是饮料和食物。

一个菜单数据只能有一种饮料或一种食物。

所以,菜单表有这样的东西.... [ID] [类型] [type_fk]

如果菜单表类型是“D”,它会找到饮料表,并使用type_fk,找到饮料......这里有一个更详细的例子:

id:1,type:D, type_fk:1
id:2,type:F, type_fk:1
在饮料表中,我们有

id:1, name:coke, unit:ml

在食物表中,我们有

id:1, name:chicken 

我想分开两个表的结果是因为饮料表有“单位”栏,但食品表没有这个......所以,我会根据用户的类型从用户那里获得信息和type_fk。所以,在第一个例子中,我可以得到“可乐”,第二个例子,我可以得到“鸡”。

请放弃您对此设计的评论。

2 个答案:

答案 0 :(得分:0)

这里似乎没有问题。这样的设计就可以了。

答案 1 :(得分:0)

我建议您使用单个表而不是2个表:

Menu (Id, ItemId)
Item (Id, Name, Type, Unit)

背后的原因是强制引用完整性。 Menu.ItemId将是引用Item.Id的外键。如果您有2个表,则无法强制执行参照完整性。

我相信你不应该担心稀疏列。例如,将鸡肉单位存放为一块或将其留空。

编辑:
如果你想避免使用稀疏表,没有使用某些列的表,那么你可能会考虑这样的事情:

Menu (Id, ItemId)
Item (Id, Name)
ItemProperties (ItemId, Name, Value)

例如

Item:
-----
Id    Name
1     Chicken
2     Coke

ItemProperties:
---------------
ItemId    Name    Value
1         Price   10
1         Type    Chinese
2         Price   1
2         Unit    ml
2         Size    300

这样就可以保持参照完整性并避免稀疏表。

如果您使用的是SQL Server 2008,请检查此SQL Server 2008 Sparse Columns