Die verschiedenen Fahrzeugtypen sind ein Beispiel für ein allgemeines Problem, das bei der Datenmodellierung immer wieder auftritt. Es heißt "Generalisierung / Spezialisierung" in der ER-Modellierung und "Oberklasse / Unterklasse" in der Objektmodellierung.
Ein Objektmodellierer verwendet die im Objektmodell integrierten Vererbungsfunktionen, um das Problem ganz einfach zu lösen. Die Unterklassen erweitern einfach die Oberklasse.
Der relationale Modellierer ist mit einem Problem konfrontiert. Wie werden die Tabellen entworfen, um die Vorteile der Vererbung nachzuahmen?
Die einfachste Technik nennt sich Vererbung einzelner Tabellen . Daten zu allen Fahrzeugtypen werden in einer einzigen Tabelle für Fahrzeuge zusammengefasst. Es gibt eine Spalte, car_type, in der alle Autos eines Typs zusammengefasst sind. Kein Auto kann mehr als einem Typ angehören. Wenn eine Spalte beispielsweise für Elektroautos irrelevant ist, bleibt sie in den Zeilen, die sich auf Elektroautos beziehen, NULL .
Diese einfache Lösung eignet sich gut für kleinere und einfachere Fälle. Das Vorhandensein vieler NULL-Werte erhöht den Speicheraufwand geringfügig und den Abrufaufwand geringfügig. Der Entwickler muss möglicherweise die dreiwertige SQL-Logik lernen, wenn boolesche Tests für nullfähige Spalten durchgeführt werden. Das kann zunächst verwirrend sein, aber man gewöhnt sich daran.
Es gibt eine andere Technik, die als Klassentabellenvererbung bezeichnet wird . In diesem Design gibt es separate Tabellen für gas_car, electric_car und hybrid_car sowie für alle eine kombinierte Tabelle car. Wenn Sie alle Daten zu einem bestimmten Fahrzeugtyp benötigen, verbinden Sie die Fahrzeugtabelle mit der entsprechenden Spezialtabelle. In diesem Entwurf gibt es weniger NULL-Werte, aber Sie können mehr beitreten. Diese Technik funktioniert in größeren und komplexeren Fällen besser.
Es gibt eine dritte Technik, die als gemeinsamer Primärschlüssel bezeichnet wird. Diese Technik wird häufig in Verbindung mit der Vererbung von Klassentabellen verwendet. Die Spezialtabellen für die Unterklassen haben als Primärschlüssel eine Kopie des Primärschlüssels des entsprechenden Eintrags in der Fahrzeugtabelle. Diese ID-Spalte kann sowohl als Primärschlüssel als auch als Fremdschlüssel deklariert werden.
Dies erfordert ein wenig zusätzliche Programmierung, wenn neue Autos hinzugefügt werden sollen, aber es macht die Verknüpfungen einfach, leicht und schnell.
Über- und Unterklassen treten in der realen Welt ständig auf. Hab keine Angst. Testen Sie Ihr ursprüngliches Design jedoch auf Leistung. Wenn Ihr erster Versuch einfach und vernünftig ist, können Sie ihn optimieren, um ihn zu beschleunigen.