我这里有三张桌子.... 一个是菜单,第二个是饮料和食物。
一个菜单数据只能有一种饮料或一种食物。
所以,菜单表有这样的东西.... [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。所以,在第一个例子中,我可以得到“可乐”,第二个例子,我可以得到“鸡”。
请放弃您对此设计的评论。
答案 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