Ich versuche, Fremdschlüssel richtig zu verwenden, um die Datenintegrität zu wahren. Ich bin nicht wirklich ein Datenbanktyp, also frage ich mich, ob es ein allgemeines Designprinzip gibt, das ich nicht kenne. Hier ist ein Beispiel für das, was ich zu tun versuche:
Angenommen, Sie möchten eine Fahrzeugdatenbank mit Typ (Pkw, Lkw usw.), Marke und Modell erstellen. Ein Benutzer muss zumindest den Typ eingeben, aber die Marke und das Modell sind optional (wenn das Modell angegeben wird, ist die Marke erforderlich). Meine erste Idee ist, die Datenbank als solche einzurichten:
Type:
-id (PK)
-description
Make:
-id (PK)
-type_id (FK references Type:id)
-description
Model:
-id (PK)
-make_id (FK references Make:id)
-description
Vechicle:
-id (PK)
-type_id (FK references Type:id)
-make_id (FK references Make:id)
-model_id (FK references Model:id)
Wie würden Sie die FKs für Fahrzeuge einrichten, um sicherzustellen, dass Typ, Marke und Modell übereinstimmen? Wie würden Sie zum Beispiel verhindern, dass ein Fahrzeug (Typ:Motorrad, Marke:Ford, Modell:Civic) hat? Jede dieser FKs wäre gültig, aber sie halten nicht die Beziehungen aufrecht, die durch die FKs der anderen Tabellen gezeigt werden.
Auch, weil Modell nicht erforderlich ist, kann ich nicht nur speichern die model_id FK und arbeiten rückwärts von ihm.
Ich bin überhaupt nicht an das Datenbankdesign gebunden, also bin ich offen für die Möglichkeit, die Art und Weise, wie die Tabellen eingerichtet sind, zu ändern. Irgendwelche Ideen?
P.S. - Ich benutze mysql, wenn jemand interessiert ist, aber dies ist eher eine allgemeine Frage über Datenbanken.
Bearbeiten (Klarstellungen):
-type_id und make_id werden in der Fahrzeugtabelle benötigt, es sei denn, es gibt eine Möglichkeit, diese für den Fall herauszufinden, dass model_id null ist;
-Die Beziehungen zwischen type_id, make_id und model_id müssen beibehalten werden.