Ich versuche, Vererbung mit separaten Tabellen wie folgt umzusetzen:Vererbung mit separaten Tabellen und LEFT JOIN: Wie wissen, welche Unterklasse der Datensatz gehört zu
Animal (id, name, age)
Cat (id_animal, other fields related to cats)
Dog (id_animal, other fields related to dogs)
wo id_animal
Referenzen animal.id
.
Ich frage mich, was ist der beste Weg, um alle Daten über einen Datensatz angesichts seiner id
bekommen. Für jetzt habe ich diese Anfrage:
SELECT * FROM animal
LEFT JOIN cat ON cat.id_animal = animal.id
LEFT JOIN dog ON dog.id_animal = animal.id
WHERE animal.id = 5
ich alle Daten bekommen ich brauche ... aber ich weiß nicht, ob das Tier 5
eine Katze oder ein Hund ist. Tatsächlich habe ich mehrere geerbte Tabellen mit den gleichen Attributen für den Moment und so kann ich den Typ des Tieres nicht erhalten, indem ich die Nullspalten in der Antwort prüfte.
Ich befürchte auch, dass all diese JOINs meine Anwendung verlangsamen werden.
Was ist die beste Lösung?
- hinzufügen
type
Spalt inAnimal
(und vielleicht auch die Art mit einem erstenSELECT
erhalten und die Unterklasse-bezogenen Felder mit einer anderenSELECT
auf der entsprechenden Untertabelle bekommen?) - anderen
Danke !
Ich bin nicht sicher, warum Sie das tun möchten, aber als eine intellektuelle Übung ... Ihre "fügen Sie eine Spalte Typ" klingt die Art, wie ich damit umgehen würde; obwohl ich eine "type" -Tabelle mit einem Feld hinzufügen könnte, das angibt, welche Tabelle die zusätzlichen Details für diesen Typ enthält. – Uueerdo