Hallo Matthias,
ich bereite mich gerade auf eine Klausur vor und ich verstehe
den Vorteil von zwei Arten des Relationenmodells nicht.
Wir haben in der Vorlesung folgende Arten besprochen:
Volle Redundanz, Hausklassenmodell, vertikale Partitionierung
und Hierarchierelation.
Die Begriffe sind keine „Arten des Relationenmodells“ sondern bezeichnen verschiedene Möglichkeiten, die Generalisierung/Spezialisierung (als Konzept aus der Objektorientierung) aus dem (E)ER-Modell in das Relationenmodell zu überführen.
Ich verwendet im Folgenden den Begriff „Supertyp“ für den generalisierten Entitätstyp und „Subtyp“ für den/die spezialisierten Entitätstyp/en.
Das für mich Sinnvollste ist mit Abstand die vertikale
Partitionierung, dadurch dass man die einzelnen Relationen
durch einen Fremdschlüssel Joinen kann, kann man je nach
Bedarf einzelne Tabellen verwenden oder eben den Join nutzen.
Jeder Entitätstyp wird zur Relation. Das Schlüsselattribut des Supertypen wird Fremd- und Primärschlüssel in der Relation, die aus dem Subtypen hervorgeht.
Diese Auflösung ist sinnvoll, wenn die Subtypen weitere, vom Supertypen verschiedene Attribute haben. Sie ist auch sinnvoll und notwendig, wenn nicht alle Entitäten durch die Subtypen beschrieben werden. Beispiel: Supertyp = Medien, Subtypen = Buch, Zeitschrift, DVD. Eine Entität kann Buch oder Zeitschrift oder DVD oder ein anderes Medium sein. Es gibt also Medien, die nicht durch Subtypen abgebildet sind. In dem Fall muss auch der Supertyp als Relation abgebildet werden.
Danach käme für mich die Hierarchierelation, man speichert
alle Daten die man hat in einer Relation und zusätzlich ein
Type Tag um die einzelnen Werte als Klasse gruppieren zu
können.
Nur der Supertyp wird zur Relation.
Diese Auflösung ist sinnvoll, wenn die Subtypen keine weiteren/eigenständigen Attribute besitzen. Dies kann der Fall sein, wenn die Generalisierung/Spezialisierung zur Veranschaulichung der Hierarchiezusammenhänge modelliert wurde, ohne dass die Subtypen sich bzgl. ihrer Attribute vom Supertypen unterscheiden.
Eine Zusammenfassung von Subtypen, die eigene Attribute besitzen, wäre nicht sinnvoll. Das würde später auf Datenbankebene zu Tabellenspalten führen, die ggf. viele NULL-Werte enthalten. Dies erfordert zusätzliche Constraints, um die Daten semantisch korrekt bearbeiten zu können.
Die volle Redundanz finde ich, wie der Name schon sagt,
ziemlich überflüssig viele Werte werden doppelt
gespeichert.
Auf Relationenebene ist dies sicher unnötig, zumal es dem Orthogonalitätsprinzip widerspricht: Ein und dieselbe Information sollte nicht durch mehrere Relationen abgebildet werden. Die Redundanz müsste durch Anwendung der Normalformen wieder beseitigt werden.
Auf Datenbankebene mag der Ansatz zumindest aus Performanzgründen relevant sein. Allerdings sollte man dies dann eher mittels materialisierter Views lösen.
Genauso unnötigfinde ich das Hausklassenmodell. Für jede
Klasse eine einzelne Relation und keine Fremdschlüssel die
einen Sinnvollen Join zulassen.
Nur die Subtypen werden zur Relation. Sie „erben“ alle Attribute des Supertypen.
Diese Auflösung ist sinnvoll, wenn alle Entitäten durch die Subtypen beschrieben werden. Man spricht in dem Fall auch von einer totalen Beteiligungsbeschränkung. Beispiel: Supertyp = Medien, Subtypen = Buch, Zeitschrift, DVD. Jede Entität ist entweder Buch oder Zeitschrift oder DVD. Es gibt keine anderen Medien. Welchen Zweck hätte dann eine Relation Medien, wenn alle Entitäten schon durch die Subtypen erfasst werden?
Alles klar?
Peter