Typhierarchie

Mittels Typ-, Sicht- und Tabellenhierarchien wird in SQL das objektorientierte Konzept der Spezialisierung umgesetzt. Die aus der Objektorientierung bekannte intensionale Spezialisierung wird mit dem Konzept der Typhierarchien umgesetzt. Ein Subtyp erbt alle Attribute und Methoden des Supertyps. Zudem kann der Subtyp weiter spezialisiert werden, durch neue Methoden und neue Attribute oder durch weitere Einschränkungen des Wertebereichs vererbter Atribute. Objekte des Subtyps können auch dort verwendet werden, wo der Supertyp als Objekttyp definiert ist (Prinzip der Sustituierbarkeit).

Grundbaustein von Typhierarchien sind die strukturierten Datentypen. Mit der CREATE TYPE-Anweisung werden aus einfachen und strukturierten Datentypen neue strukturierte Datentypen definiert. Dabei kann mittels der UNDER-Option zwischen zwei strukturierten Datentypen eine Vererbungsbeziehung definiert werden, wobei nur Einfachvererbung möglich ist. Der eine Typ ist der Supertyp und der andere der Suptyp. Als Supertypen können alle Typen ohne NOT FINAL-Klausel fungieren.

Für die Anwendungsentwicklung ist zum einen vorteilhaft, dass jedes Attribut bzw. jede Methode nur einmal definiert bzw. programmiert werden muss, und zum anderen, dass Typen für die Definiton neuer Typen wiederverwendet werden könne. Damit wird das Schema übersichtlicher, leichter zu warten und zu ändern.

Beispiele:

  -- mit NOT FINAL kann personen_typ als Supertyp fungieren
  CREATE TYPE personen_typ AS (name        name_typ,
                               adresse     adress_typ,
                               geb_datum   DATE,
                               email       VARCHAR(50) ARRAY[5]) 
                               NOT FINAL
                               REF IS SYSTEM GENERATED;

  -- Ein Subtyp für die Studierenden mit neuen Attributen und einer Methode
  CREATE TYPE studierende_typ UNDER personen_typ AS (matrikel_nr           VARCHAR(10),
                                                     ersteinschreibung_am  DATE,
                                                     exmatrikuliert_am     DATE)
                                                     NOT FINAL
                                                     INSTANCE METHOD einschreiben(date) RETURNS SELF AS RESULT;

  -- Ein zweiter Subtyp für die Lehrenden, für den keine weiteren Suptypen definiert werden können
  CREATE TYPE lehrende_typ UNDER personen_typ AS (lehrgebiet            VARCHAR(100),
                                                  besoldungsgruppe      VARCHAR(5),
                                                  eingestellt_am        DATE,
                                                  emeritiert_am         DATE)
                                                  FINAL;

  -- Ein erster Subtyp für die Studierenden und damit eine zweite Ebene unter dem Personen_typ
  CREATE TYPE wiss_hilfskreafte_typ UNDER studierende_typ AS (erstanstellung_am  DATE,
                                                              ausgeschieden_am   DATE)
                                                              NOT FINAL;


Quellen:

  • ANSI/ISO/IEC 9075-1:2003. Part 1 "SQL/Framework", ISO International Organization for Standardization / ANSI American National Standards Institute, September 2003
  • ANSI/ISO/IEC 9075-2:2003. Part 2 "SQL/Foundation", ISO International Organization for Standardization / ANSI American National Standards Institute, Dezember 2003
  • Türker, Can/Saake, Gunter: "Objektrelationale Datenbanken", dpunkt-verlag, Heidelberg, 2006, ISBN 3-89864-190-2

Kategorie: Objektrelationale DB, T