Strukturierte Typen Abstrakte Objekttypen mit Verhalten und eingekapselter Struktur – – – – – Optional: Subtypbildung mittels UNDER-Klausel Optional: Instanziierung verbieten Nicht-optionales Schlüsselwort NOT FINAL erlaubt Subtypbildung Optional: Bestimmen der Referenzgenerierung (OID-Erzeugung) Optional: Objektverhalten in Methoden kodieren Syntax: CREATE TYPE Typname [UNDER Supertypname] AS (Attributdefinitionsliste) [[NOT] INSTANTIABLE] NOT FINAL [Referenzgenerierung [Referenzcasting]] [Methodendeklarationsliste] Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-26 Attributdefinition Syntax: Attributname Typ [REFERENCES ARE NOT CHECKED | REFERENCES ARE CHECKED ON DELETE NO ACTION] [DEFAULT Defaultwert] – – Bei Referenzattributen, die mit einer SCOPE-Klausel versehen sind, muss auch die REFERENCES-Klausel spezifiziert werden Default: REFERENCES ARE NOT CHECKED n Ungültige Referenzen sind möglich Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-27 Strukturierte Typen - Beispiele Instanzen strukturierter Typen heissen Objekte CREATE TYPE AdresseTyp AS ( Strasse VARCHAR(30), Nr DECIMAL(4), PLZ DECIMAL(5), Ort VARCHAR(40), Land VARCHAR(25) ) NOT FINAL; Basisdatentypen CREATE TYPE PersonTyp AS ( Name VARCHAR(30), Anschrift AdresseTyp, Ehepartner REF(PersonTyp), Kinder REF(PersonTyp) ARRAY[10] ) NOT FINAL; Strukturierter Typ Einbettung Referenz Konstruierte Typen Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-28 Operationen auf strukturierten Typen (1) Erzeugen einer Instanz eines strukturierten Typs mit dem Default-Konstruktor, der genauso heisst wie der zugehörige strukturierte Typ: z.B. AdresseTyp() oder PersonTyp() Attributzugriff erfolgt mittels Funktionsaufrufe sowie Punkt-Operator Vergleich zweier Objekte (Instanzen strukturierter Typen): — keine Ordnungsrelationen implizit bereitgestellt — benutzerdefinierte Ordnungsfunktionen können aber definiert werden Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-29 Operationen auf strukturierten Typen (1) Typtest: Objekt IS [NOT] OF (Typnamensliste) — Prädikat IS OF wird TRUE, wenn die Liste den Typ des Objekts bzw. einen Supertyp davon enthält — Letzteres kann durch die Verwendung von ONLY ausgeschlossen werden, z.B. m IS OF (ONLY(Mitarbeiter)) Temporäre Typanpassung entlang einer Typhierarchie: (Objekt AS Supertypname) TREAT(Objekt AS Subtypname) -- Anpassung nach oben -- Anpassung nach unten Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-30 Einkapselung von strukturierten Typen l Vollständige Einkapselung – – Attribute nur über Methoden zugreifbar Attributzugriffe und Methodenaufrufe gleich behandelt l Implizite Observer- und Mutator-Methoden für jedes Attribut Observer: FUNCTION Strasse(AdresseTyp) RETURNS VARCHAR(30); FUNCTION Nr(AdresseTyp) RETURNS DECIMAL(4); FUNCTION PLZ(AdresseTyp) RETURNS DECIMAL(5); FUNCTION Ort(AdresseTyp) RETURNS VARCHAR(40); FUNCTION Land(AdresseTyp) RETURNS VARCHAR(25); Mutator: FUNCTION Strasse(AdresseTyp, VARCHAR(30)) FUNCTION Nr(AdresseTyp, DECIMAL(5)) FUNCTION PLZ(AdresseTyp, DECIMAL(5)) FUNCTION Ort(AdresseTyp, VARCHAR(40)) FUNCTION Land(AdresseTyp, VARCHAR(25)) Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) RETURNS AdresseTyp; RETURNS AdresseTyp; RETURNS AdresseTyp; RETURNS AdresseTyp; RETURNS AdresseTyp; 4-31 Attributzugriff bei Instanzen eines strukturierten Typs l Zugriff über Funktionsaufrufe oder Punkt-Operator – – X.Attributname entspricht Attributname(X) SET X.Attributname = Wert entspricht Attributname(X, Wert) l Pfadausdrücke: Nacheinander Anwendung des Punkt-Operators – Navigierende Zugriffe l Beispiel: BEGIN DECLARE p PersonTyp; SET p.Name = ‘Luke Skywalker’; SET p.Anschrift.Ort = ‘Hollywood’; END; Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-32 Erzeugen von Instanzen eines strukturierten Typs l Verwendung des Default-Konstruktors l Initialisierung mittels – – Mutator-Methoden Redefiniertem Konstruktor (kann beliebig überladen werden) l Beispiel für das Überladen eines Konstruktors: CREATE FUNCTION PersonTyp (n VARCHAR(30)) RETURNS PersonTyp BEGIN DECLARE p PersonTyp; SET p = PersonTyp(); SET p.Name = n; RETURN p; END; Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) Aufruf des Default-Konstruktors 4-33 Subtypbildung - Aufbau von Typhierarchien l Subtypdefinition mittels UNDER-Klausel – – – – Subtyp erbt alle Attributen und Methoden des Supertyps Supertyp muss selbst ein strukturierter Typ sein Subtyp darf maximal einen direkten Supertyp haben n Keine (direkte) Mehrfachvererbung möglich Subtyp kann geerbte Methoden überschreiben und überladen l Strukturierte Typen, die keine Subtypen sind, heissen Wurzeltypen Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-34 Subtypen - Beispiele CREATE TYPE MitarbeiterTyp UNDER PersonTyp AS ( PNr INTEGER, Bewerbung CLOB(50K), Bild BLOB(5M), Vorgesetzter REF(MitarbeiterTyp), Projekte REF(ProjektTyp) ARRAY[50], Gehalt Franken ) NOT FINAL; CREATE TYPE ManagerTyp UNDER MitarbeiterTyp AS ( Leitet REF(ProjektTyp) ARRAY[100], Bonus Franken ) NOT FINAL; Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-35 Referenzgenerierung & Referenzcasting l Nur für Wurzeltypen definierbar l Syntax: REF USING Typ | REF FROM (Attributliste) | REF IS SYSTEM GENERATED CAST (SOURCE AS REF) WITH Funktionsname CAST (REF AS SOURCE) WITH Funktionsname – REF USING Typ § OID-Werte sind von einem bestimmten Typ, etwa INTEGER – REF FROM (Attributliste) § OID aus vorhandenen Attributwerten eines Schlüssels funktional bestimmt – REF IS SYSTEM GENERATED § OID-Generierung durch das System (Defaulteinstellung) Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-36 Methoden l Objektverhalten in Methoden kodiert l Methoden sind Funktionen, die zu einem strukturierten Typen gehören – – Deklaration erfolgt innerhalb der Typdefinition Besitzen impliziten SELF-Parameter l Overloading, Overriding und Late Binding – – Überladen von Methodennamen n mehrere gleichnamige Methoden mit unterschiedlichen Parametern Dynamisches Binden von überschriebenen Methoden zur Laufzeit n Auswahl der Implementierung hängt vom Objekttyp ab Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-37 Methodendeklaration l Syntax: Deklaration einer Methode [INSTANCE | STATIC] METHOD Methodenname (Parameter) RETURNS Rückgabetyp [Methodencharakteristikaliste] STATIC definiert Tabellenmethode l Syntax: Deklaration einer "überschreibenden" Methode OVERRIDING METHOD Methodenname (Parameter) RETURNS Rückgabetyp Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-38 Methodencharakteristika (1) l Syntax: [LANGUAGE {ADA|C|COBOL|FORTRAN|MUMPS|PASCAL|SQL}] [PARAMETER STYLE {SQL | GENERAL}] [[NOT] DETERMINISTIC] [NO SQL | CONTAINS SQL | READS SQL DATA | MODIFIES SQL DATA] [{RETURNS NULL | CALLED} ON NULL INPUT ] [TRANSFORM GROUP Gruppenname [FOR TYPE StrukturierterTyp]] Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-39 Methodencharakteristika (2) l Angabe, ob die Berechnung deterministisch ist oder nicht – Relevant für CHECK- und CASE-Definition NOT DETERMINISTIC Zwei aufeinanderfolgende Aufrufe der Methode mit den gleichen Argumenten können selbst bei gleichen DB-Zuständen unterschiedliche Resultate liefern (Beispiel: Methoden, die DATETIME abfragen) DETERMINISTIC Methode hat in zwei aufeinanderfolgenden Aufrufen mit den gleichen Argumenten auf dem gleichen DBZustand den gleichen Effekt Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-40 Methodencharakteristika (3) l Angabe, ob und welche Art von SQL-Anweisungen eine Methode enhält NO SQL Enthält keine SQL-Anweisungen CONTAINS SQL Enthält SQL-Anweisungen READS SQL DATA Liest SQL-Daten MODIFIES SQL DATA Schreibt SQL-Daten Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-41 Methodencharakteristika (4) l Angabe, ob Methode aufrufbar ist, wenn ein Parameter NULL ist RETURNS NULL ON NULL INPUT Ist beim Aufruf der Methode mindestens einer der Parameter NULL, dann wird die Methode nicht ausgeführt und NULL zurückgeliefert CALLED ON NULL INPUT Methode wird auch dann ausgeführt, wenn einer der Parameter NULL ist Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-42 Methodencharakteristika (5) l Transformgruppen enthalten Funktionen, die automatisch aufgerufen werden, wenn benutzerdefinierte Typen von der SQL-Umgebung in die Host-Sprachumgebung (und umgekehrt) transferiert werden l Syntax: Definition einer Transformgruppe CREATE TRANSFORM FOR BDTyp Gruppenname ( FROM SQL WITH Funktionsname(Parameter), TO SQL WITH Funktionsname(Parameter) ) Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-43 Methodencharakteristika (5) l Defaulteinstellungen INSTANCE STATIC schliesst OVERRIDING aus LANGUAGE SQL LANGUAGE SQL schliesst NO SQL, Parameterstyle-Klausel, Transform-Klausel aus NOT DETERMINISTIC CONTAINS SQL CALLED ON NULL INPUT Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-44 Methodenklaration - Beispiele CREATE TYPE PersonTyp AS ( ... ) NOT FINAL METHOD AnzahlKinder() RETURNS INTEGER; CREATE TYPE MitarbeiterTyp AS ( ... ) NOT FINAL METHOD Einkommen() RETURNS Franken; METHOD Gehaltserhöhung() RETURNS Franken; CREATE TYPE ManagerTyp AS ( ... ) NOT FINAL OVERRIDING METHOD Einkommen() RETURNS Franken; OVERRIDING METHOD Gehaltserhöhung() RETURNS Franken; Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-45 Methodendefinition l Implementierung einer deklararierten Methode l Syntax: [INSTANCE | STATIC] CREATE METHOD Methodenname (Parameter) RETURNS Rückgabetyp FOR StrukturierterTyp Methodenrumpf l Methodenrumpf besteht aus einer SQL-Prozedur-Anweisung – – – Schemadefinitions- oder Schemamanipulationsanweisung INSERT, UPDATE, DELETE, SELECT (SQL-Datenänderungsanweisungen) ... Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-46 Methodendefinition - Beispiele l Definition einer "lesenden" Methode CREATE METHOD Einkommen() RETURNS Franken FOR MitarbeiterTyp RETURN (SELF.Gehalt); l Überschreiben einer "lesenden" Methodendefinition CREATE METHOD Einkommen() RETURNS Franken FOR ManagerTyp RETURN (SELF.Gehalt + SELF.Bonus); Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-47 Erweiterung von SQL zur Programmiersprache Compound statement SQL variable declaration IF statement CASE statement LOOP statement WHILE statement REPEAT statement FOR statement RETURN statement CALL statement Assignment statement SIGNAL statement BEGIN [ATOMIC] SQL-Anweisungen END; DECLARE Variable Datentyp; IF Prädikat THEN SQL-Anweisungen ELSE SQL-Anweisungen END IF; CASE X WHEN Prädikat THEN SQL-Anweisungen ELSE SQL-Anweisungen END CASE; LOOP SQL-Anweisungen END LOOP; WHILE Prädikat DO SQL-Anweisungen END WHILE; REPEAT SQL-Anweisungen UNTIL Prädikat END REPEAT; FOR Loop-Variable AS Cursor-Spezifikation DO SQL-Anweisungen END FOR; RETURN Rückgabewert; CALL Routine(Parameterliste); SET Variable = Wert; SIGNAL division_by_zero; Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-48 Definition einer "schreibenden" Methode CREATE METHOD GehaltsErhöhung() RETURNS Franken FOR MitarbeiterTyp BEGIN DECLARE altesGehalt Franken; altesGehalt = SELF.Gehalt; IF (SELF.AnzahlKinder < 3) OR (SELF.AnzahlProjekte < 2) THEN SET SELF.Gehalt = 1.03 * altesGehalt; ELSE SET SELF.Gehalt = 1.05 * altesGehalt; ENDIF IF (SELF.Gehalt > 500000) THEN raise_error(…); RETURN SELF.Gehalt; END; Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-49 Überschreiben einer "schreibenden" Methode CREATE METHOD GehaltsErhöhung() RETURNS Franken FOR ManagerTyp BEGIN DECLARE altesGehalt Franken; altesGehalt = SELF.Gehalt; SET SELF.Gehalt = altesGehalt * (1+0.01*(SELF.AnzahlProjekte +SELF.AnzahlKinder)); IF (SELF.Gehalt > 25000000) THEN raise_error(…); RETURN SELF.Gehalt; END; Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-50 Einsatz strukturierter Typen l Als Attributtyp anderer strukturierter Typen l Als Parametertyp von Methoden, Funktionen und Prozeduren l Als Typ von SQL-Variablen l Als Typ einer typisierten Tabelle l Als Typ von Tabellenspalten CREATE TABLE PersonTupelTabelle ( Stammdaten PersonTyp, Bild BLOB(1M), Lebenslauf CLOB(50k) ); Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-51 Instantiierung und Verwendung strukturierter Typen l Instanziierung mittels (Typ-)Konstruktor Geschachtelte Konstruktoraufrufe möglich – INSERT INTO PersonenTupelTabelle VALUES (PersonTyp('Billy Bär', AdresseTyp('Seefeldstrasse', 31, 8008, 'Zurich', 'CH'), NULL, ARRAY(NULL)), NULL, NULL); l Zugriff auf Objektattributwerte (und Aufruf von Methoden) SELECT Stammdaten.Name, Stammdaten.AnzahlKinder FROM PersonenTupelTabelle WHERE Stammdaten.Anschrift.Ort = 'Zürich' AND POSITION('Diplom' IN Lebenslauf) > 0; Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-52 Benutzerdefinierte Gleichheit von Instanzen l Vergleichbarkeit und Ordnung von Instanzen benutzerdefinierter Typen – – Ordnungsformen: NONE, EQUALS ONLY, ORDER FULL Ordnungskategorien: n RELATIVE: Ordnungsfunktion ordnet jeweils zwei Instanzen n MAP: Vergleich bzw. Ordnung basiert auf dem Ergebnis einer Abbildungfunktion, die Instanzen auf Werte von Basisdatentypen abbildet n STATE: Vergleich basiert auf paarweise Gleichheit der Attributwerte l Syntax: CREATE ORDERING FOR BDTyp {EQUALS ONLY | ORDER FULL} BY {RELATIVE WITH Ordnungsfunktion(P1 BDTyp, P2 BDTyp) | MAP WITH Abbildungsfunktion(Parameter BDTyp) | STATE [Schemaname]} Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-53 Benutzerdefinierte Gleichheit von Instanzen (Forts.) l Einschränkungen – – – – – Alle Typen einer Typhierarchie müssen gleiche Ordnungsform besitzen FULL erfordert RELATIVE oder MAP STATE nur für strukturierte Typen definierbar RELATIVE und STATE nur für Wurzeltypen definierbar Dintinct-Typen: ORDER FULL l Definition von STATE für PersonTyp erzeugt automatisch: CREATE FUNCTION EQUALS(p1 PersonTyp, p2 PersonTyp) RETURNS BOOLEAN RETURN (SPECIFICTYPE(p1) =SPECIFICTYPE(p2) AND p1.Name = p2.Name AND p1.Anschrift = p2.Anschrift AND p1.Ehepartner = p2.Ehepartner AND p1.Kinder = p2.Kinder); Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-54 Ordnungs- und Abbildungsfunktionen l Seien X, Y Instanzen eines benutzerdefinierten Typs Z – Sei RF eine Ordnungsfunktion für Z. Dann gelten folgende Ordnungsrelationen: X = Y ⇔ RF(X, Y) = 0 X < Y ⇔ RF(X, Y) = -1 X > Y ⇔ RF(X, Y) = 1 – X ≠ Y ⇔ RF(X, Y) ≠ 0 X ≤ Y ⇔ RF(X, Y) ∈{-1, 0} X ≥ Y ⇔ RF(X, Y) ∈{0, 1} Sei MF eine Abbildungsfunktion für Z. Dann gelten folgende Ordnungsrelationen: X θ Y ⇔ MF(X) θ MF(Y), wobei θ ∈{< < , ≤, = , ≠, ≥ , > } Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-55 Ordnung durch benutzerdefinierte Abbildungsfunktionen Definition einer Abbildungsfunktion für strukturierten Typ AdresseTyp: CREATE FUNCTION AdresseMap(a AdresseTyp) RETURNS VARCHAR(104) RETURN (a.Land || a.Ort || a.Strasse || CAST(a.Nr AS VARCHAR(4)) || CAST(a.PLZ AS VARCHAR(5))); Definition einer Ordnungsfunktion für strukturierten Typ AdresseTyp: CREATE ORDERING FOR AdresseTyp ORDER FULL BY MAP WITH AdresseMap(AdresseTyp); Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-56 Verwendung benutzerdefinierter Ordnungsfunktionen Beispielanfragen, in denen eine Ordnungsfunktion zum Einsatz kommt: SELECT Stammdaten.Name, Stammdaten.Anschrift FROM PersonTupelTabelle ORDER BY Stammdaten.Anschrift; SELECT Stammdaten.Name, Stammdaten.Anschrift FROM PersonTupelTabelle WHERE Stammdaten.Anschrift < AdresseTyp('Seefeldstrasse', 31, 8008, 'Zürich', 'CH'); Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-57 Zusammenfassung - Benutzerdefinierte Typen l Distinct-Typen als Kopien vorhandener Typen – Strenge Typisierung (Typkompatibilität über Namensäquivalenz) l Strukturierte Typen als abstrakte Objekttypen – – – – – – Objekteinbettung vs. Objektreferenzierung (Kopier- vs. Referenzsemantik) Kapselung (Implizite Observer- und Mutator-Methoden für alle Attribute) Aggregationshierarchien (Strukturierte Typen zusammengesetzt aus anderen strukturierten Typen) Typhierarchien (Subtypbildung) Overloading und Overriding von Methoden plus dynamisches Binden Vergleichbarkeit und Ordnung Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-58