在下表结构中:
Fruits
(
fruit_id,
fruitName
)
Vegetables
(
vegetable_id,
vegetableName
)
favoriteFoods
(
food_id,
foodName,
type_id (References either a fruit or a vegetable)
)
我意识到我可以放弃在favoriteFoods表上使用外键约束,然后只需在favoriteFoods表中添加一个类型字段来区分水果和蔬菜。但是,如何构建表以便实际创建必要的外键约束?
答案 0 :(得分:4)
我只会使用2个表。而不是单独的水果和蔬菜表,为什么不有一个食品表。然后在fkfood_id到food_id上有一个外键约束。然后,如果由于某种原因你必须添加肉,那么维护使用它的应用程序会容易得多。
Food
(
food_id,
foodName,
foodType
)
favoriteFoods
(
favoritefood_id,
fkfood_id
)
答案 1 :(得分:0)
这取决于您将如何处理数据。
如果由于某种原因归一化对您很重要,以下情况就会很好。
Fruits (
fruit_id,
food_id references favoritefoods.food_id,
fruitName)
Vegetables(
vegetable_id,
food_id references favoritefoods.food_id,
vegetableName)
favoriteFoods (
food_id,
foodName)
最喜欢的食物表不需要“知道”它是什么类型的食物,如果有的话。每种水果和每种蔬菜都与相应的食物结合在一起。
如果您想从favoriteFoods中选择所有水果,只需加入水果表和favoriteFoods表。你甚至可以把番茄当作蔬菜和水果,如果这适合你的想象。
以上是基于连接便宜的假设。在许多情况下,连接真的很便宜。在更改设计之前检查它以避免连接。