2016-04-11 11 views
0

Die akzeptierte Antwort auf diese Frage ist super nützlich: How can you represent inheritance in a database?Vererbung in SQL. Wie erstelle ich eine Select-Anweisung in der Vererbung von Tabellen pro Typ?

Ich mag diese Lösung, die er Tabelle pro Typ Vererbung ruft:

CREATE TABLE policies (
    policy_id   int, 
    date_issued  datetime, 

    -- // other common attributes ... 
); 

CREATE TABLE policy_motor (
    policy_id   int, 
    vehicle_reg_no varchar(20), 

    -- // other attributes specific to motor insurance ... 

    FOREIGN KEY (policy_id) REFERENCES policies (policy_id) 
); 

CREATE TABLE policy_property (
    policy_id   int, 
    property_address varchar(20), 

    -- // other attributes specific to property insurance ... 

    FOREIGN KEY (policy_id) REFERENCES policies (policy_id) 
); 

Allerdings verstehe ich nicht, wie man ein wählen zu tun Erklärung. Am Ende der Antwort sagt er:

Suche nach allen Richtlinien, unabhängig von der Unterart wird jetzt sehr einfach: Keine UNIONs benötigt - nur eine SELECT * FROM Richtlinien.

Das wird alle Daten aus den Richtlinien zurückgeben, aber was ist mit den Subtypen? Sollte die Aussage dies sein: SELECT * FROM policies INNER JOIN policy_motor ON policies.policy_id=policy_motor.id INNER JOIN policy_property ON policy_property.id=policies.id WHERE date_issued = yesterday

Für meinen speziellen Fall habe ich 70 Subtypen. Muss ich innerlich alle 70 Tische betreten oder fehlt mir ein einfacher Weg dies zu tun?

Antwort

1

Zunächst einmal sollte es nicht sein SELECT * FROM policies INNER JOIN sondern SELECT * FROM policies LEFT JOIN Da in der „Politik“ Tabelle, die Sie alle Richtlinien haben, und einen Verweis auf sie in der Sub-Typ-Tabelle. Ich denke, wenn Sie den Subtyp benötigen, müssen Sie ihn als eine Spalte der Richtlinientabelle hinzufügen. Auf diese Weise wissen Sie auch, wo Sie nachsehen können. Der Zweck der Untertabelle war, sehr lange Tabellen zu vermeiden, die in Werten halb "NULL" waren. Auf diese Weise haben Sie nur die Daten, die Sie in der Tabelle "Parent" benötigen. Sie müssen so viele Basistypdaten in der übergeordneten Tabelle haben (jede Richtlinie hat eine Datumsübernahme) und nur die Daten, die für den Untertyp in der Untertabelle spezifisch sind.

+0

Wenn Sie den Subtyp als Spalte in der Richtlinientabelle hinzufügen, wie sieht die Select-Anweisung dann aus? – Adam