1

在下表结构中:

Fruits 
(
    fruit_id,
    fruitName
)


Vegetables
(
    vegetable_id,
    vegetableName
)

favoriteFoods 
(
     food_id,
     foodName,
     type_id (References either a fruit or a vegetable)
)

我意识到我可以放弃在 favoriteFoods 表上使用外键约束,然后简单地在 favoriteFoods 表中添加一个类型字段来区分水果和蔬菜。但是,您将如何构建表以便实际创建必要的外键约束?

4

2 回答 2

4

我只会使用 2 张桌子。与其有一个单独的水果和蔬菜表,不如有一个食物表。然后在 fkfood_id 到 food_id 上有一个外键约束。然后,如果由于某种原因你不得不添加肉,维护使用它的应用程序会容易得多。

Food
    (
    food_id,
    foodName,
    foodType
    )

favoriteFoods
    (
    favoritefood_id,
    fkfood_id
    )
于 2008-11-04T21:51:10.873 回答
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 中选择所有的水果,只需加入 fruits 表和 favoriteFoods 表。如果你喜欢的话,你甚至可以把番茄既作为蔬菜又作为水果加入。

以上是基于连接便宜的假设。在许多情况下,连接确实很便宜。在更改设计以避免连接之前检查一下。

于 2008-11-05T16:15:12.453 回答