Frage

In der folgenden Tabelle Struktur:

Fruits 
(
    fruit_id,
    fruitName
)


Vegetables
(
    vegetable_id,
    vegetableName
)

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

Ich weiß, dass ich verzichten könnte einen Fremdschlüssel auf der favoriteFoods Tabelle und dann einfach ein Typ-Feld auf die favoriteFoods Tabelle hinzufügen zwischen Obst und Gemüse zu unterscheiden. Aber wie würden Sie die Tabellen so strukturieren, dass Sie tatsächlich die notwendigen Fremdschlüsselbedingungen schaffen könnte?

War es hilfreich?

Lösung

Ich würde nur zwei Tabellen verwenden statt. Statt einen separates Obst und Gemüse Tisch zu haben, warum nicht eine Tabelle von Lebensmitteln hat. Dann werfen Sie einen Fremdschlüssel auf fkfood_id food_id. Dann, wenn Sie aus irgendeinem Grunde immer Fleisch hinzufügen, wäre es viel einfacher, um die Anwendung zu pflegen, die diese verwendet.

Food
    (
    food_id,
    foodName,
    foodType
    )

favoriteFoods
    (
    favoritefood_id,
    fkfood_id
    )

Andere Tipps

Es hängt davon ab, was Sie mit den Daten tun werden.

Wenn aus irgendeinem Grund die Normalisierung ist wichtig für Sie, die folgenden Werke ganz gut.

Fruits (    
     fruit_id,
     food_id references favoritefoods.food_id,
     fruitName)
Vegetables(
     vegetable_id,
     food_id references favoritefoods.food_id,
     vegetableName)
favoriteFoods (
     food_id,
     foodName)

Die favoriteFoods Tabelle braucht nicht zu „wissen“, welche Art von Nahrung ist es, wenn überhaupt. Jede Frucht und jedes Gemüse ist gebunden an die entsprechenden Lieblingsessen.

Wenn Sie alle Früchte von favoriteFoods auswählen möchten, kommen nur die Früchte Tabelle und die favoriteFoods Tisch. Man könnte sogar eine Tomate als beide ein Gemüse enthalten und eine Frucht, wenn das zu Ihrer Stimmung passt.

Das obige wird auf der Annahme, die billig sind beitritt. In vielen Situationen, schließt sich wirklich billig sind. Überprüfen Sie es heraus, bevor Sie ändern Ihr Design verbindet zu vermeiden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top