Strukturierte Typen Attributdefinition

Werbung
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
Herunterladen