Überblick Kapitel 5 Objektorientierung und Datenbanken z Motivation z „Klassische SQL-Tabellen“ z Erweiterungen des Datenmodells in SQL 1999 neue (Basis-) Datentypen neue Typkonstruktoren Objekttypen – - Objektrelationaler SQL’99-Standard - – – Dieser Teil der Unterlagen wurde weitgehend unverändert übernommen von Dr. Can Türker, ETH Zürich. Herzlichen Dank für die Überlassung! z … und daraus resultierende Erweiterungen bei den Operationen Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) “Advanced applications need advanced data structures!” z 4-2 Beispiel: RDBMS in technischen Anwendungen Ziel: 1 Anwendungsobjekt in 1 Datenbankobjekt abbilden Robot “Real World” Effector Rob_ID Rob_Descr Eff_ID Function Rob1 Rob2 Rob3 : Speedy 400 ............... Speedy 600 ............... Colossus MX-3 ......... : GR600 GR700 LS1 PS1350 Greifer Typ 600 .............................. Greifer Typ 700 .............................. Laserschweißer Typ 1 .................... Punktschweißer Typ 1350 .............. PS1380 PS1510 SR200 Punktschweißer Typ 1380 .............. Punktschweißer Typ 1510 .............. Schrauber Typ 200 ......................... Axes has !!! (1,n) Robot (0,n) can work with Rob_I D Arm_I D Rob1 Rob1 Rob1 : links links links : AchsNr Robot_Arms GW_min GW_max -90 -170 -190 : 90 180 180 1 2 3 : Masse : Beschl 40,0 30,5 20,0 : 1,0 1,5 3,0 : (0,n) (1,1) Matrices (1,n) consist of (1,1) Axes Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-3 links rechts solo links Rob3 Rob3 mitte rechts (4,4) degrees of freedom (1,1) matrix rows Rob_ID Arm_ID Rob1 Rob1 Rob1 Rob1 Rob1 : Rob1 links links links links links : links CanWorkWith AchsNr ZNr Sp1 1 1 1 1 2 : 3 1 2 3 4 1 : 4 1 0 0 0 0 : 0 Sp2 0 0 -1 0 0 : -1 Sp3 Sp4 0 1 0 1 0 : 0 1 0 80 1 60 : 70 Rob_ID Eff_ID Rob1 Rob1 Rob1 Rob1 : Rob2 Rob2 SR200 SR300 PS1380 GR700 : SR200 SR300 Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) Beispiel: SQL Query 4-4 Beispiel: Resultat dieser Anfrage z z SELECT r.Rob_ID, r.Rob_Descr, ar.Arm_ID, ac.AxisNo, m.ZNo, m.Sp1, m.Sp2, m.Sp3, m.Sp4, ac.GW_min, ac.GW_max, ac.Mass, ac.Accel, re.Eff_ID, e.Function FROM Robot r, Robot_Arms ar, Axes ac, Matrices m, CanWorkWith re, Effectors e WHERE r.Rob_ID = 'Rob1' AND r.Rob_ID = ar.Rob_ID AND ar.ROB_ID = ac.Rob_ID AND ar.Arm_ID = ac.Arm_ID AND ac.Arm_ID = m.Arm_ID AND ac.Rob_ID = m.Rob_ID AND ac.AxisNo = m.AxisNo AND r.Rob_ID = re.Rob_ID AND re.Eff_ID = e.Eff_ID Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) ArmID Rob1 Rob1 Rob2 Rob3 Effector Arms DBMS Rob_ID z z 4-5 diese SQL Anfrage liefert eine (“flache”, aber breite) Tabelle bei 2 Armen á 4 Achsen und 6 Effektoren: 192 Tupel mit insgesamt 2.880 Attributwerten wegen der relationalen Darstellung des Ergebnisses (1NF Relation): nur 216 Werte (=8%) aus dieser Flut sind essenziell, die anderen 92% sind redundant! Konsequenz: SQL bzw. RDBMSe brauchen andere, zusätzliche Strukturierungsmöglichkeiten für anspruchsvollere Anwendungen! Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-6 Tupeltabelle Basiskonstrukte von SQL-92 z Tabellen – – – – z Basisdatentypen – z MULTISET • Eine Tupeltabelle ist eine traditionelle Tabelle im Sinne von SQL-92 • Eine solche Tabelle besteht aus einer (Multi-)Menge von Tupeln ROW Tabellenname Tabellenname Basisdatentyp – Attributwerte Zeilen (Rows (Rows)) = Tupel ... ... Primär-/Fremdschlüssel, Check-Klauseln Assertions: Bedingungen über mehrere Tabellen Zugriffsrechte (Grants) Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-7 Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) BOOLEAN Neue Basisdatentypen: BOOLEAN, BLOB, CLOB – z Neue Typkonstruktoren: ROW, ARRAY, REF z Benutzerdefinierte Datentypen (Distinct-Typ und strukturierte Typen) z Typhierarchien (Subtypen) z Typisierte Tabellen und Tabellenhierarchien (Subtabellen) z Typisierte Sichten und Sichthierarchien (Subsichten) Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) – 4-9 Neue Basisdatentypen (2) – – – TRUE FALSE AND TRUE TRUE TRUE FALSE FALSE UNKNOWN UNKNOWN OR TRUE FALSE UNKNOWN TRUE TRUE TRUE TRUE IS TRUE FALSE UNKNOWN TRUE TRUE FALSE FALSE FALSE TRUE UNKNOWN UNKNOWN FALSE FALSE FALSE FALSE UNKNOWN UNKNOWN FALSE UNKNOWN FALSE UNKNOWN TRUE TRUE FALSE UNKNOWN UNKNOWN UNKNOWN FALSE FALSE TRUE FALSE Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) UNKNOWN FALSE FALSE TRUE 4-10 Definition einer Tabelle mit BOOLEAN- und LOB-Attributen: CREATE TABLE MitarbeiterTupelTabelle ( Name VARCHAR(30), Vollzeit BOOLEAN, Bild BLOB(1M), Bewerbung CLOB(50k) ); BLOB (Binary Large Object) CLOB (Character Large Object) Operationen SUBSTRING, OVERLAY, || (Konkatenation) IS [NOT] NULL, LIKE, EQUALS, POSITION, LENGTH, SIMILAR Nicht erlaubt BLOB/CLOB-Attribute als Teil eines Schlüssels GROUP BY, ORDER BY, GREATER/LESS THAN Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) NOT Werte: TRUE FALSE UNKNOWN Operationen: NOT AND OR IS [NOT] Neue Basisdatentypen - Beispiel Large Objects – 4-8 Neue Basisdatentypen (1) SQL-99 - Datenmodellerweiterungen z Spalten (Columns (Columns)) = Attribute R A1 ... An ... INTEGER, SMALLINT, NUMERIC, DECIMAL,REAL, FLOAT, CHARACTER, DATE, TIME, BIT, ... Integritätsbedingungen – z Basistabellen zur Speicherung von Daten Sichten (Views): abgeleitete Tabellen Typ eines Attributs ist ein Basisdatentyp (1NF) Zeilen (Tupel) setzen sich aus Instanzen der jeweiligen Wertebereiche zusammen Verwendung von BOOLEAN- und LOB-Attributen: SELECT Name FROM MitarbeiterTupelTabelle WHERE Vollzeit IS TRUE AND POSITION ('Datenbanken' IN Bewerbung) > 0; 4-11 Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-12 Tupeltypkonstruktor - ROW Operationen auf Tupeltypen Erzeugen eines Tupeltyps: Erzeugen eines Tupels mit dem Tupelkonstruktor (der genauso wie der Tupeltypkonstruktor heisst): ROW('Seestrasse', 31, 8008, 'Zürich', 'Schweiz') ROW(Feldname_1 Datentyp_1, ..., Feldname_n Datentyp_n) Beispiel: ALTER TABLE MitarbeiterTupelTabelle ADD COLUMN Anschrift ROW(Strasse VARCHAR(30), Nr DECIMAL(4), PLZ DECIMAL(5), Ort VARCHAR(40), Land VARCHAR(25)); Zugriff auf ein Tupelfeld mittels Punktnotation: SELECT Name, Anschrift.ORT FROM MitarbeiterTupelTabelle Vergleich zweier Tupel: ROW(1, 2, 7) = ROW(1, 2, 7) -- liefert TRUE ROW(1, 2, 7) = ROW(1, 3, 7) -- liefert FALSE ROW(1, 2, 7) = ROW(1, NULL, 7) -- liefert UNKNOWN ROW(1, 2, 7) < ROW(1, 3, 5) ROW(1, 2, 7) < ROW(1, 1, 7) ROW(1, 2, 7) < ROW(1, NULL, 7) ROW(1, 2, 7) < ROW(1, 3, NULL) Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-13 -- liefert TRUE -- liefert FALSE -- liefert UNKNOWN -- liefert TRUE Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) Arraytypkonstruktor - ARRAY 4-14 Operationen auf Arraytypen (1) Erzeugen eines Arraytyps: Erzeugen eines Arrays mit dem Arraykonstruktor (der genauso wie der Arraytypkonstruktor heisst): ARRAY('Deutsch', 'Englisch') Elementtyp ARRAY[Maximale-Kardinalität] Beispiel: ALTER TABLE MitarbeiterTupelTabelle ADD COLUMN Sprachkenntnisse VARCHAR(15) ARRAY[8]; Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-15 Direkter Zugriff auf das i-te Arrayfeld mittels [i]: SELECT Sprachkenntnisse[2] FROM MitarbeiterTupelTabelle; Deklarativer Elementzugriff mittels Entschachtelung: SELECT s FROM MitarbeiterTupelTabelle, UNNEST(Sprachkenntnisse) s; Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) Operationen auf Arraytypen (2) Änderung eines einzelnen Arrayelements: UPDATE MitarbeiterTupelTabelle SET Sprachkenntnisse[1] = 'Türkisch'; Änderung des kompletten Arraywerts: UPDATE MitarbeiterTupelTabelle SET Sprachkenntnisse = ARRAY['Türkisch']; Operationen auf Arraytypen (3) Konkatenation zweier Arrays: — CARDINALITY(ARRAY['Deutsch', Türkisch']) -- liefert den Wert 2 Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) ARRAY['Deutsch', Türkisch'] ||ARRAY['Englisch'] -- erzeugt ARRAY['Deutsch', Türkisch', 'Englisch'] Vergleich zweier Arrays: — Kardinalität liefert Anzahl der Arrayelemente: 4-16 Zwei Arrays sind vergleichbar g.d.w. ihre Elementtypen vergleichbar sind Zwei vergleichbare Array A1 und A2 sind gleich (A1=A2) g.d.w (1) sie die gleiche Kardinalität besitzen und (2) alle Elemente paarweise gleich sind ARRAY['Deutsch', Türkisch'] <> ARRAY['Deutsch', Türkisch', 'Englisch'] ARRAY['Deutsch', Türkisch'] = ARRAY['Deutsch', Türkisch', NULL] 4-17 Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) -- liefert TRUE -- liefert FALSE 4-18 Referenztypkonstruktor - REF Operationen auf Referenztypen Erzeugen eines Referenztyps: Erzeugen einer Referenz auf ein Objekte durch Zuweisung der zugehörigen OID an ein Referenzattribut bzw. Referenzvariable REF(Strukturierter-Typ) [SCOPE (TypisierteTabelle)] referenzierter Typ muss ein strukturierter Typ sein Instanzen eines Referenztyp können nur dann dereferenziert werden, wenn eine entsprechend typisierte Tabelle als Wertebereich (Scope) festgelegt wurde – – Beispiel: ALTER TABLE MitarbeiterTupelTabelle ADD COLUMN Abteilung REF(AbteilungsTyp) SCOPE Abteilungen; Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) SELECT Abteilung->Name FROM MitarbeiterTupelTabelle; Referenzauflösung mittels DEREF-Operator: SELECT DEREF(Abteilung) FROM MitarbeiterTupelTabelle; Vergleich zweier Referenzen: AbteilungsTyp sei hier ein strukturierter Typ und Abteilung eine auf diesem Typ basierende typisierte Tabelle – Dereferenzierung mittels Pfeil-Operator: — — 4-19 Neue Typkonstruktoren - Beispiele (1) Zwei Referenzen sind vergleichbar g.d.w. ihre referenzierten Typen gleich sind Zwei vergleichbare Referenzen R1 und R2 sind gleich (R1=R2) g.d.w sie denselben Referenzwert aufweisen (d.h. auf dasselbe Objekte verweisen) Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-20 Neue Typkonstruktoren - Beispiele (2) Verwendung des Tupel- bzw. Arraytypkonstruktors: Änderung einer Tupelkomponente: INSERT INTO MitarbeiterTupelTabelle(Name, Sprachkenntnisse) VALUES (ROW('Billy', 'Clintwood'), ARRAY['Deutsch', 'Englisch', 'Türkisch']); UPDATE MitarbeiterTupelTabelle SET Name.Nachname = 'Türker' WHERE Name.Nachname = 'Tuerker'; Zugriff auf tupelwertige Attribute bzw. Verwendung arraywertiger Attribute: Änderung eines Arrayelements mittels direktem Positionszugriff: SELECT Name.Nachname FROM MitarbeiterTupelTabelle WHERE Name.Vorname = 'John' AND 'Deutsch' IN (SELECT * FROM UNNEST(Sprachkenntnisse)); UPDATE MitarbeiterTupelTabelle SET Sprachkenntnisse[4]= 'Französisch' WHERE Name.Nachname = 'Türker'; Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-21 Distinct-Typen – – – – Erzeugen einer Instanz eines Distinct-Typs: Wiederverwendung Strenge Typisierung (basiert auf Namensäquivalenz) Nicht-optionales Schlüsselwort FINAL schliesst Subtypbildung aus Systemdefinierte Vergleichsoperatoren basierend auf dem Quelltyp Cast-Operatoren zur Konversion zwischen Distinct- und Quelltyp Erzeugen eines Distinct-Typs: Beispiele: 4-22 Operationen auf Distinct-Typen Kopie eines existierenden Datentyps mit neuem Namen – Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) Distinct-Typname(Quelltypwert) z.B. Franken(1311.69) oder Euro(170470.13) Vergleich zweier Distinct-Werte: — Distinct-Typen unterliegen der strengen Typisierung — Zwei Distinct-Werte sind vergleichbar g.d.w. ihre Distinct-Typen identisch sind — Beispiel: Franken(1000.00) = Euro(1000.00) ergibt einen Typkonflikt CREATE TYPE Distinct-Typname AS (Quelltyp) FINAL [CAST (SOURCE AS DISTINCT) WITH Funktionsname] [CAST (DISTINCT AS SOURCE) WITH Funktionsname] CREATE TYPE Franken AS DECIMAL(12,2) FINAL; CREATE TYPE Euro AS DECIMAL(12,2) FINAL; Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-23 Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-24 Verwendung von Distinct-Typen (1) Strukturierte Typen Abstrakte Objekttypen mit Verhalten und eingekapselter Struktur Beispiel: Distinct-Typen in Tabellendefinitionen: – CREATE TABLE CHBank(Nr INTEGER, Stand Franken); CREATE TABLE EuroBank(Nr INTEGER, Stand Euro); – – – – Anfrage basierend auf Distinct-Typen: SELECT e.Nr FROM CHBank c, EuroBank e WHERE c.Nr= 234302 AND c.Stand > e.Stand; Syntax: Anfrage ergibt Typkonflikt: Schweizer Franken und Euro sind nicht vergleichbar → Typkonvertierung ist notwendig! → CAST-Funktionen Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 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 4-25 Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) Attributdefinition 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; Attributname Typ [REFERENCES ARE NOT CHECKED | REFERENCES ARE CHECKED ON DELETE NO ACTION] [DEFAULT Defaultwert] – 4-30 Strukturierte Typen - Beispiele Syntax: – CREATE TYPE Typname [UNDER Supertypname] AS (Attributdefinitionsliste) [[NOT] INSTANTIABLE] NOT FINAL [Referenzgenerierung [Referenzcasting]] [Methodendeklarationsliste] Bei Referenzattributen, die mit einer SCOPE-Klausel versehen sind, muss auch die REFERENCES-Klausel spezifiziert werden Default: REFERENCES ARE NOT CHECKED Ungültige Referenzen sind möglich Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) CREATE TYPE PersonTyp AS ( Name VARCHAR(30), Anschrift AdresseTyp, Ehepartner REF(PersonTyp), Kinder REF(PersonTyp) ARRAY[10] ) NOT FINAL; 4-31 Strukturierter Typ Einbettung Referenz Konstruierte Typen Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) Operationen auf strukturierten Typen (1) 4-32 Operationen auf strukturierten Typen (1) Erzeugen einer Instanz eines strukturierten Typs mit dem Default-Konstruktor, der genauso heisst wie der zugehörige strukturierte Typ: 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. — z.B. AdresseTyp() oder PersonTyp() Attributzugriff erfolgt mittels Funktionsaufrufe sowie Punkt-Operator m IS OF (ONLY(Mitarbeiter)) 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) Basisdatentypen Temporäre Typanpassung entlang einer Typhierarchie: (Objekt AS Supertypname) TREAT(Objekt AS Subtypname) 4-33 Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) -- Anpassung nach oben -- Anpassung nach unten 4-34 Einkapselung von strukturierten Typen z Vollständige Einkapselung – – z Attributzugriff bei Instanzen eines strukturierten Typs z Attribute nur über Methoden zugreifbar Attributzugriffe und Methodenaufrufe gleich behandelt – – Implizite Observer- und Mutator-Methoden für jedes Attribut Observer: Mutator: z 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); 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)) Zugriff über Funktionsaufrufe oder Punkt-Operator Pfadausdrücke: Nacheinander Anwendung des Punkt-Operators – z z 4-35 – z Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) z – – Beispiel für das Überladen eines Konstruktors: – z Subtyp erbt alle Attributen und Methoden des Supertyps Supertyp muss selbst ein strukturierter Typ sein Subtyp darf maximal einen direkten Supertyp haben Keine (direkte) Mehrfachvererbung möglich Subtyp kann geerbte Methoden überschreiben und überladen Strukturierte Typen, die keine Subtypen sind, heissen Wurzeltypen Aufruf des Default-Konstruktors Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-37 Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) Subtypen - Beispiele 4-38 Methoden 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; z Objektverhalten in Methoden kodiert z Methoden sind Funktionen, die zu einem strukturierten Typen gehören – – z – 4-39 Deklaration erfolgt innerhalb der Typdefinition Besitzen impliziten SELF-Parameter Overloading, Overriding und Late Binding – 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-36 Subtypdefinition mittels UNDER-Klausel – Mutator-Methoden Redefiniertem Konstruktor (kann beliebig überladen werden) CREATE FUNCTION PersonTyp (n VARCHAR(30)) RETURNS PersonTyp BEGIN DECLARE p PersonTyp; SET p = PersonTyp(); SET p.Name = n; RETURN p; END; DECLARE p PersonTyp; SET p.Name = ‘Luke Skywalker’; SET p.Anschrift.Ort = ‘Hollywood’; Subtypbildung - Aufbau von Typhierarchien Verwendung des Default-Konstruktors Initialisierung mittels – BEGIN END; Erzeugen von Instanzen eines strukturierten Typs z Navigierende Zugriffe Beispiel: RETURNS AdresseTyp; RETURNS AdresseTyp; RETURNS AdresseTyp; RETURNS AdresseTyp; RETURNS AdresseTyp; Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) X.Attributname entspricht Attributname(X) SET X.Attributname = Wert entspricht Attributname(X, Wert) Überladen von Methodennamen mehrere gleichnamige Methoden mit unterschiedlichen Parametern Dynamisches Binden von überschriebenen Methoden zur Laufzeit Auswahl der Implementierung hängt vom Objekttyp ab Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-41 Methodenklaration - Beispiele Methodendefinition CREATE TYPE PersonTyp AS ( ... ) NOT FINAL METHOD AnzahlKinder() RETURNS INTEGER; z z Syntax: [INSTANCE | STATIC] CREATE METHOD Methodenname (Parameter) RETURNS Rückgabetyp FOR StrukturierterTyp Methodenrumpf 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) Implementierung einer deklararierten Methode z Methodenrumpf besteht aus einer SQL-Prozedur-Anweisung – – – 4-49 Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) Einsatz strukturierter Typen z Als Attributtyp anderer strukturierter Typen z Als Parametertyp von Methoden, Funktionen und Prozeduren z Als Typ von SQL-Variablen z Als Typ einer typisierten Tabelle z Als Typ von Tabellenspalten z Instanziierung mittels (Typ-)Konstruktor – z 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; 4-55 Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) – z z Ordnungsformen: NONE, EQUALS ONLY, ORDER FULL Ordnungskategorien: RELATIVE: Ordnungsfunktion ordnet jeweils zwei Instanzen MAP: Vergleich bzw. Ordnung basiert auf dem Ergebnis einer Abbildungfunktion, die Instanzen auf Werte von Basisdatentypen abbildet STATE: Vergleich basiert auf paarweise Gleichheit der Attributwerte Syntax: Distinct-Typen als Kopien vorhandener Typen – z – – – – – 4-57 Strenge Typisierung (Typkompatibilität über Namensäquivalenz) Strukturierte Typen als abstrakte Objekttypen – 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-56 Zusammenfassung - Benutzerdefinierte Typen Vergleichbarkeit und Ordnung von Instanzen benutzerdefinierter Typen – Geschachtelte Konstruktoraufrufe möglich INSERT INTO PersonenTupelTabelle VALUES (PersonTyp('Billy Bär', AdresseTyp('Seefeldstrasse', 31, 8008, 'Zurich', 'CH'), NULL, ARRAY(NULL)), NULL, NULL); Benutzerdefinierte Gleichheit von Instanzen z 4-50 Instantiierung und Verwendung strukturierter Typen CREATE TABLE PersonTupelTabelle ( Stammdaten PersonTyp, Bild BLOB(1M), Lebenslauf CLOB(50k) ); Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) Schemadefinitions- oder Schemamanipulationsanweisung INSERT, UPDATE, DELETE, SELECT (SQL-Datenänderungsanweisungen) ... 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-62 Tabellen z Einziges Konzept (Container), um Daten persistent speichern zu können z Bisher in SQL-92 – – z Tabellen (Forts.) z – – Tabelle als Multimenge von Tupeln TYPE(Tabelle) = MULTISET(ROW(TYPE(A1), ..., TYPE(An))) wobei TYPE(Ai) ein Basisdatentyp ist – Erweiterungen in SQL-99 – – – Tupel- vs. Objekttabellen z Attribute können arraywertig, tupelwertig, objektwertig oder referenzwertig sein Typ einer Tabelle kann durch einen strukturierten Typ festgelegt werden Derartige Tabellen heissen typisierte Tabellen (oft auch Objekttabellen) Zeilen entsprechen Objekten (Instanzen) des festgelegten Typs Subtabellen (Tabellenhierachien) Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) Aufgepasst – – – – 4-63 Tupeltabelle = Tabelle, die einer Multimenge von Tupeln entspricht Objekttabelle = Tabelle, die einer Menge von Objekten (Instanzen eines strukturierten Typs) entspricht Typisierte Tabelle = Tabelle, dessen Typ ein benutzerdefinierter Typ ist Tupeltabellen können objektwertige Attribute enthalten Prinzipiell sind die gleichen Attributtypen für Tupel- und Objekttabellen erlaubt SQL-99 verwendet den Begriff Typisierte Tabelle mit Objekttabellensemantik Prinzipiell kann aber auch eine Tupeltabelle typisiert sein (siehe Informix; Kap.5) Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) Definition von Tupeltabellen z Syntax: z Tabellenelement: – – – 4-64 Definition von Tupeltabellen - Beispiel CREATE TABLE Tabellenname (Tabellenelementliste) CREATE TABLE PersonTupelTabelle ( Name ROW(Vorname VARCHAR(15), Nachname VARCHAR(25)), Anschrift AdresseTyp, Bild BLOB(1M), Lebenslauf CLOB(50k), Sprachkenntnisse VARCHAR(15) ARRAY[8], Hobbies VARCHAR(20) ARRAY[10] ); Attributdefinition | Tabellenintegritätsbedingung | LIKE Tabellenname Attributdefinition beinhaltet Festlegung des Datentyps und eventuell die Angabe eines Defaultwerts sowie von Attibutbedingungen Datentyp ist ein Basisdatentyp, ein mittels (geschachtelter) Anwendung von Typkonstruktoren konstruierter Typ oder ein benutzerdefinierter Typ SCOPE-Festlegung bei Referenzattributen zwingend notwendig Definition von Tabellenintegritätbedingungen wie bisher in SQL-92 LIKE-Klausel kopiert Attributdefinitionen einer anderen Tabelle (ohne Attributbedingungen und Defaultwerte) Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) • Instanzen einer Tupeltabelle heissen Tupel 4-65 Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) Anfrage an Tupeltabellen - Beispiel Definition von typisierten Tabellen Die Anfrage • Typisierte Tabelle basiert auf einem strukturierten Typen SELECT * FROM PersonTupelTabelle; • Syntax: CREATE TABLE Tabellenname OF StrukturierterTyp [UNDER Supertabelle] [( [Referenzgenerierungsoption] [Attributoptionsliste] )] liefert ein Ergebnis vom Typ MULTISET(ROW(ROW(VARCHAR(15), VARCHAR(25)), AdresseTyp, BLOB(1M), CLOB(50k), ARRAY[8](VARCHAR(15)), ARRAY[10](VARCHAR(20))) Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-66 • Attributoption: Attributname WITH OPTIONS Optionsliste • Optionen: 4-67 SCOPE TypisierteTabelle | DEFAULT Wert | Integritätsbedingung Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-68 Referenzgenerierung Definition von typisierten Tabellen - Beispiel z Legt OID-Attribut und die Generierung der OIDs fest z Muss für jede typisierte Wurzeltabelle angegeben werden z Darf nicht bei Subtabellen angegeben werden z Referenzgenerierungsoptionen – – – CREATE TABLE Personen OF PersonTyp ( REF IS oid SYSTEM GENERATED, Ehepartner WITH OPTIONS SCOPE Personen, Kinder WITH OPTIONS SCOPE Personen ); REF IS oid USER GENERATED OID-Generierung durch den Benutzer REF IS oid SYSTEM GENERATED OID-Generierung durch das System REF IS oid DERIVED (Attributliste) OID aus vorhandenen Attributwerten eines Schlüssels funktional bestimmt Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) z z Instanzen einer typisierten Tabelle heissen Objekte Nur Instanzen einer typisierten Tabelle können mittels eines Referenzattributs referenziert werden! – 4-69 SCOPE-Klausel bestimmt die typisierte Tabelle, die referenziert wird Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) Anfrage an typisierte Tabellen - Beispiel Einfügen und Ändern in typisierten Tabellen - Beispiel Was ist der Ergebnistyp der folgenden Anfrage? Erzeugen von Tabelleninhalten (impliziter Aufruf des PersonTyp-Konstruktors): SELECT * FROM Personen; INSERT INTO Personen VALUES ('Billy Bär', AdresseTyp('Seefeldstrasse', 31, 8008, 'Zurich', 'CH'), (SELECT REF(p) FROM Personen p WHERE p.Name = 'Mama Bär'), ARRAY(NULL)); Vielleicht SET(PersonTyp) ? Oder doch Belegen von Referenzattributen: MULTISET(ROW(REF(PersonTyp), VARCHAR(30), AdresseTyp, REF(PersonTyp), ARRAY[10](REF(PersonTyp)))) UPDATE Personen SET Kinder[1] = (SELECT REF(p) FROM Personen p WHERE p.Name = 'Baby Bär') WHERE Name = 'Billy Bär'; ? Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-71 Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) Selektion auf typisierten Tabellen - Beispiel 4-72 Subtabellenbildung - Aufbau von Tabellenhierarchien Zugriff auf ein Attribut eines eingebetteten Objektes erfolgt (analog zum Tupelkomponentenzugriff) mittels Dot-Operator: z Subtabellendefinition mittels UNDER-Klausel – SELECT Name, Anschrift.Ort FROM Personen; – Zugriff auf ein Attribut eines referenziertes Objekts erfolgt mittels PfeilOperator (entspricht Dereferenzierung plus Attributselektion): – – SELECT Name, Ehepartner->Name FROM Personen; z Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-70 4-73 Typ der Subtabelle muss ein direkter Subtyp des Typs der Supertabelle sein (Tiefe) Extension der Subtabelle muss immer eine Untermenge der (tiefen) Extension der Supertabelle sein Instanzen der Subtabelle sind auch Mitglieder der zugehörigen Supertabellen Subtabelle darf maximal eine direkte Supertabelle haben Keine (direkte) Mehrfachspezialisierung möglich Subtabelle kann "geerbte" Integritätsbedingungen verschärfen bzw. neue hinzudefinieren Typisierte Tabellen, die keine Subtabellen sind, heissen Wurzeltabellen Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-74 Subtabellenbildung - Beispiele Typ- versus Tabellenhierarchie CREATE TABLE Spieler OF PersonTyp Typ CREATE TABLE Mitarbeiter OF MitarbeiterTyp UNDER Personen ( Vorgesetzter WITH OPTIONS SCOPE Mitarbeiter, Projekte WITH OPTIONS SCOPE Projekte ); CREATE TYPE PersonTyp Typ CREATE TABLE Personen OF PersonTyp Supertyp CREATE TABLE Manager OF ManagerTyp UNDER Mitarbeiter ( Leitet WITH OPTIONS SCOPE Projekte ); CREATE TYPE MitarbeiterTyp UNDER PersonTyp Supertabelle Typ CREATE TABLE Mitarbeiter OF MitarbeiterTyp UNDER Personen Typ CREATE TABLE Angestellter OF MitarbeiterTyp Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-75 Einfügungen und Löschungen in Tabellenhierarchien z Personen SELECT * FROM Personen; DELETE FROM Personen WHERE Name='Joe'; ('Joe', ...) ('Jim', ...) SELECT * FROM Mitarbeiter; INSERT INTO Mitarbeiter(Name) VALUES('Joe'); INSERT INTO Mitarbeiter(Name) VALUES('Jim'); SELECT * FROM ONLY(Personen); Zugriff auf flache Extension einer Supertabelle liefert alle Personen, die keine “speziellen” Personen (z.B. Mitarbeiter) sind MitarbeiterTyp ('Joe', ...) SELECT * FROM Personen EXCEPT Mitarbeiter; ('Jim', ...) Zugriff auf Teil einer tiefen Extension einer Supertabelle liefert alle Personen, die keine Mitarbeiter sind DELETE FROM Mitarbeiter WHERE Name='Jim'; Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) Zugriff auf tiefe Extension einer Subtabelle liefert alle Mitarbeiter-Objekte mit den geerbten Personen-Attributen UNDER Mitarbeiter Zugriff auf tiefe Extension einer Supertabelle liefert alle Personen, auch die Mitarbeiter PersonTyp ('Billy', ...) 4-76 Anfragen an Tabellenhierarchien INSERT an Supertabellen propagiert und DELETE wirkt auf Sub- und Supertabellen INSERT INTO Personen(Name) VALUES('Billy'); Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-77 Dereferenzierung und Navigation Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-78 Typinformation und Konversion Dereferenzierung mittels DEREF (liefert Attributwerte eines referenzierten Objekts): Explizite Konversion vom Sub- zum Supertyp: SELECT DEREF(Vorgesetzter) FROM Mitarbeiter; SELECT Einkommen(m AS MitarbeiterTyp) FROM Manager m; Dereferenzierung (von Referenzattributwerten) über Pfeil-Operator: Zugriff auf allgemeinere Einkommensmethode des Typs MitarbeiterTyp Explizite Konversion vom Super- zum Subtyp: SELECT * FROM Mitarbeiter WHERE Vorgesetzter->Name = 'Billy'; SELECT Einkommen(TREAT(m AS ManagerTyp)) FROM Mitarbeiter m WHERE m IS OF (ManagerTyp); Zugriff auf speziellere Einkommensmethode des Typs ManagerTyp Dereferenzierung mit anschliessendem Komponentenzugriff: Sei t eine Instanz eines benutzerdefinierten Typs und T eine Menge von benutzerdefinierten Typen (inklusive all derer Subtypen), dann liefert das Typprädikat t IS OF (T) TRUE g.d.w. der speziellste Typ von t Element von T ist SELECT * FROM Mitarbeiter WHERE Vorgesetzter->Anschrift.PLZ = 65307; Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-79 Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-80 Substituierbarkeit z Overloading, Overriding und dynamisches Binden Instanz eines Subtyps kann in jedem Kontext benutzt werden, wo eine Instanz eines Supertyps nutzbar ist – – – z Mehrere Methoden mit demselben Namen – Eingabeargumente für Methoden, deren formale Parameter auf dem Supertyp definiert sind Rückgabewert einer Methode oder Funktion, für das der Supertyp als formaler Typ definiert wurde Zuweisungen zu Variablen oder Attributen des Supertyps – z Dynamisches Binden zur Laufzeit ("dynamic dispatch") Bei identischer Methodensignatur wird die spezielleste Methodenimplementierung ausgewählt Beispiel: Folgende Anfrage berechnet das Einkommen von Personen, wobei sich die Berechnungsfunktionen entsprechend dem Typ der Person unterscheiden kann SELECT Einkommen FROM Personen; Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-81 Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) SFW-Block (1) SQL-99 - Datenmodell z SET MULTISET OBJECT ROW ARRAY REF Grundgerüst einer SQL-Anfrage: SFW-Block SELECT FROM [WHERE [GROUP BY [HAVING Was ist das Ergebnis einer Anfrage in SQL-99? – Subtypbeziehung – Untermengenbeziehung – Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-89 – – z Attribute (auch abgeleitete, berechnete) Methodenaufrufe Unterabfragen 9 9 (9 ) z FROM: Welche Tabellenausdrücke sind erlaubt? – – Nur skalare Unterabfragen, die genau einen Wert liefern! – – – Beispiel: z SELECT m.Name, 12*m.Einkommen, (SELECT COUNT(*) FROM Mitarbeiter WHERE Vorgesetzter = REF(m)) FROM Manager m; Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-90 SFW-Block (3) SELECT: Was darf in der Projektionsliste stehen? – 9 Tupeltabelle 9 Objekttabelle Wert bzw. Kollektion — (In SQL:200n soll dies mö möglich sein) Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) SFW-Block (2) z Projektionsliste Tabellenausdruck Prädikat] Attributliste] Gruppenprädikat] Basisdatentyp z Einstiegspunkte in die Datenbank: Typisierte Tabelle: SET(OBJECT(...)) Untypisierte Tabelle: MULTISET(ROW(...)) 4-82 Tupeltabellen Objekttabellen (auch flache Extensionen) Kollektionsabgeleitete Tabellen Methodenaufrufe (die Tabellen liefern) Unterabfragen (abgeleitete Tabellen) 9 9 9 — 9 Beispiele: Kollektionsabgeleitete bzw. mittels Unterabfragen abgeleitete Tabellen SELECT * FROM Manager m, UNNEST(m.Leitet) p; SELECT * FROM (SELECT * FROM (Tabelle1 UNION Tabelle2) INTERSECT Tabelle3); 4-91 Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-92 SFW-Block (4) z Zusammenfassung WHERE: Welche Prädikate sind erlaubt? – – – Prädikate über Attribute Prädikate mit Methodenaufrufen Prädikate mit Unterabfragen z 9 9 9 SQL-99 : Objektrelationale Erweiterung von SQL-92 – – – – z – Beispiel: SELECT * FROM Manager m WHERE Name LIKE 'T%' AND Einkommen > 50000 AND 3 < (SELECT COUNT(*) FROM Mitarbeiter WHERE Vorgesetzter = REF(m)); Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-93 Neue Basisdatentypen und Typkonstruktoren Benutzerdefinierte Datentypen und Typhierarchien Typisierte Tabellen und Tabellenhierarchien Typisierte Sichten und Sichtenhierarchien Neue Anfragenkonstrukte, z.B. Objektattributzugriff mittels Dot-Operator Dereferenzierung mittels DEREF und Pfeil-Operator Zugriff auf flache Extension einer Tabelle mittels ONLY Zugriff auf Typ eines Attributs bzw. Variablen mittels IS OF Zugriff auf Subtyp eines Attributs mittels TREAT Vorlesung "Objektrelationale, erweiterbare Datenbanken" - WS 2001/2002 (Dr. C. Türker) 4-94