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 に答える