Kap. 8: Objektrelationale Datenbanken und SQL-99 • Bei ODMG spricht man von revolutionärer Abkehr von RDBMS, hat aber im Laufe der Zeit gesehen, dass eine grössere Unabhängigkeit von Programmiersprachen vorteilhaft ist. • Bei ORDBMS ist die evolutionäre Erweiterung bestehender relationaler Denkweise im Vordergrund. Man hat erkannt, dass Grundkonstrukte semantischer Datenmodelle nötig sind, und dass eine Öffnung gegenüber (abstrakten) Benutzerdatentypen gefordert wird. Letzteres motiviert auch die Entwicklung einer (4GL-) Sprache für Methoden- und Anwendungsentwicklung. • Häufig wird die Gleichung “ORDBMS = RDBMS + OODBMS” gesehen. Dies drückt die Verwendung von Prinzipien aus. • SQL-99 (oft auch SQL3 genannt): – Aktueller DB-Standard – Ziel: Vorteile von OO-Konzepten einführen, ohne bewährte SQLKonzepte aufzugeben ORDB und SQL-99-1 IS-K ORDBMS im Überblick Mächtigkeit der Operationen Relationales Modell Dateien Komplexe Objekte/ Geschachtelte Relationen Hierarchisches Modell Objekt-Relationales Modell NetzwerkModell Semantisches Datenmodell Strukturelle Komplexität IS-K ORDB und SQL-99-2 Charakterisierung von ORDBMS Hauptmerkmale: • Erweiterung der Basistypen – Attributtypen können benutzerdefiniert sein • Komplexe Objekte durch Typkonstruktoren – Tupel, Set, Multiset, List, Array, … • Objektreferenzen • Typvererbung und Subtabellen • Methoden, Regeln, Trigger ORDB und SQL-99-3 IS-K Hintergrundinformation zu SQL-99 SQL/89 mit Integrity Enhancement 120 Seiten SQL/92 579 Seiten Entry Level Intermediate Level Full Level SQL-99 > 2000 Seiten SQL Foundation SQL Call Level Interface SQL Persistent Stored Modules SQL Language Binding + Object Language Binding SQL Multimedia and Application (Full Text, Spatial) Als Draft verfügbar Spatial and Temporal XA-Spezialization IS-K ORDB und SQL-99-4 SQL-99 - Übersicht (1) • Typsystemerweiterung: Erweiterbarkeit, OO-Konzepte – Typkonstruktoren für strukturierte Attribute (komplexe Werte): ... damit einige Konstrukte • ROW Types des “erweiterten NF2• Kollektionstypen Modells” enthalten – Benutzerdefinierte Datentypen (UDT) – Referenzdatentyp (REF) – Subtypen und Subtabellen ... damit Konstrukte von OODBMS enthalten • Neue eingebaute Datentypen – Boolean, Binary Large Objects, Character Large Objects • Rekursion (Berechnen der transitiven Hülle) ORDB und SQL-99-5 IS-K SQL-99 - Übersicht (2) • Call Level Interface (CLI) → dynamisches SQL • Erweiterung von SQL zu voller Programmiersprache (Procedural Extensions, SQL/PSM "Persistent Stored Modules") – Module, Prozeduren, Funktionen im Server speichern / ausführen – volle Berechenbarkeit • Asynchrone Ausführung von SQL-Anweisungen: Parallelität • Primitive für Transaktionsmodelle – Chained Transactions, Savepoints, etc. • Trigger: Integrität und Unterstützung aktiver Datenbanken – mehrere Trigger pro Tabelle – mehrere Statements als Aktion definierbar • Roles für verbesserte Autorisierung IS-K ORDB und SQL-99-6 Die wichtigsten Typen in SQL-99 • Ausgangspunkt: TABLE Definition (CREATE TABLE): – Zeilen können wie folgt definiert werden • implizit (wie bisher) • explizit durch Row-Typdefinition – Attribute (Spalten) können folgende Typen besitzen: • vordefinierte Standarddatentypen (wie bisher) • konstruierte Typen - Konstruktoren: ROW / REF / ARRAY - SET / MULTISET / LIST erst in SQL4 • benutzerdefinierte Typen (UDT) - aufbauend auf vorderfinierten, konstruierten, und/oder bereits existierenden benutzerdefinierten Typen • Tabellen (-Namen) sind die einzigen Einstiegspunkte in die Datenbank • Instanzen von Typen, die innerhalb einer Tabelle vorkommen, sind automatisch persistent ORDB und SQL-99-7 IS-K Definition von strukturierten Typen (1) • Strukturierte Typen als eine Form von benutzerdefinierten Typen CREATE TYPE AdressTyp AS ( Strasse VARCHAR(30), Ort VARCHAR(40), PLZ INTEGER, Land VARCHAR(25) ) NOT FINAL; vordefinierte Typen benutzerdefinierter Typ konstruierte Typen CREATE TYPE PersonTyp AS ( Name VARCHAR(30), Anschrift AdressTyp, Ehepartner REF(PersonTyp), Kinder REF(PersonTyp) ARRAY[10] ) NOT FINAL; Subtypen können vorhanden sein (andernfalls FINAL) IS-K ORDB und SQL-99-8 Definition von strukturierten Typen (2) • “Objektverhalten” kann in Methoden kodiert werden • Methoden sind Funktionen, die sich auf genau einen strukturierten Typen beziehen • Beispiel fur eine Methodendeklaration: CREATE TYPE PersonTyp ( Name VARCHAR(30), Anschrift AdressTyp, Ehepartner REF(PersonTyp), Kinder REF(PersonTyp) ARRAY[10] ) NOT FINAL METHOD AnzahlKinder RETURNS INTEGER; • Realisierung über prozedurale SQL-Spracherweiterungen • Overloading / Late Binding: Methodennamen können überladen werden – dynamisches Binden (Auswahl der Implementierung) zur Laufzeit ORDB und SQL-99-9 IS-K Einkapselung von strukturierten Typen • Attribute gleich behandelt wie Methoden (Funktionen) • vollständige Einkapselung – Attribute nur über Methoden zugreifbar – Sichtbarkeitsstufen: PUBLIC und PRIVATE • für jedes Attribut werden implizit Observer- und MutatorMethoden generiert Observer: FUNCTION Strasse(AdressTyp) FUNCTION Ort(AdressTyp) FUNCTION Plz(AdressTyp) FUNCTION Land(AdressTyp) Mutator: IS-K RETURNS VARCHAR(30); RETURNS VARCHAR(40); RETURNS INTEGER; RETURNS VARCHAR(25); FUNCTION Strasse(AdressTyp, VARCHAR(30)) FUNCTION Ort(AdressTyp, VARCHAR(40)) FUNCTION Plz(AdressTyp, INTEGER) FUNCTION Land(AdressTyp, VARCHAR(25)) RETURNS AdressTyp; RETURNS AdressTyp; RETURNS AdressTyp; RETURNS AdressTyp; ORDB und SQL-99-10 Attributzugriff bei Instanzen strukturierter Typen • Zugriff über Funktionsaufrufe oder Dot-Operator (syntaktischer Zucker) – X.Attributname entspricht Attributname(X) – SET X.Attributname = Wert entspricht Attributname(X, Wert) • Pfadausdrücke: nacheinander Anwendung des Dot-Operators – navigierende Zugriffe • Beispiel: BEGIN ... DECLARE p PersonTyp; SET p.Name = ‘Luke Skywalker’; SET p.Anschrift.Ort = ‘Hollywood’; ... END; ORDB und SQL-99-11 IS-K Erzeugen von Instanzen strukturierter Typen • unter Verwendung des Default-Konstruktors • Initialisierung mittels – Mutator-Methoden – redefiniertem Konstruktor (kann beliebig überladen werden) • Beispiel: CREATE FUNCTION PersonTyp (n VARCHAR(30)) RETURNS PersonTyp BEGIN DECLARE p PersonTyp; SET p = PersonTyp(); Aufruf des Default-Konstruktors SET p.Name = n; RETURN p; END; IS-K ORDB und SQL-99-12 Definition von typisierten Tabellen (Objekttabellen) • Typisierte Tabellen basieren auf einem strukturierten Typen • Instanzen (Zeilen) sind Objekte dieses Typs • Beispiel: CREATE TABLE Personen OF PersonTyp (REF IS oid SYSTEM GENERATED, Ehepartner WITH OPTIONS SCOPE Personen, Kinder WITH OPTIONS SCOPE Personen); • Referenzklausel (hier mit SYSTEM GENERATED) muss für jede Wurzeltabelle angegeben werden • Bestimmt die Art der Referenzgenerierung (OID-Erzeugung) • Scope-Klausel muss für jedes Referenzattribut definiert werden • Bestimmt typisierte Tabelle, auf dessen Instanzen referenziert wird ORDB und SQL-99-13 IS-K Definition von Tupeltypen (ROW Types) • Tupeltyp besteht aus einer Sequenz von Attribut/Datentyp-Paaren • eingebettet innerhalb von Typ- oder Tabellendefinitionen • Beispiel: CREATE TABLE PersonenTupelTabelle ( Name ROW(Vorname VARCHAR(15), Nachname VARCHAR(15)), Anschrift ROW(Strasse VARCHAR(30), Ort VARCHAR(40), PLZ INTEGER, Land VARCHAR(25)) ); IS-K ORDB und SQL-99-14 Definition von Distinct-Typen • Zweite Form von benutzerdefinierten Typen • Erstellt Kopie eines existierenden Datentyps unter einem neuen Namen – Wiederverwendung – Distinct-Typen werden unterschieden (strenge Typisierung) CREATE TYPE Franken AS NUMERIC(9,2); CREATE TYPE Euro AS NUMERIC(9,2); CREATE TABLE CHBank(SSN INTEGER, Stand Franken); CREATE TABLE EuroBank(SSN INTEGER, Stand Euro); SELECT c.SSN, c.Stand FROM CHBank c, EuroBank e WHERE c.Stand > e.Stand; Fehler: Schweizer Franken und Euro sind nicht vergleichbar … WHERE c.Stand > Franken(e.Stand); Korrekt: Einsatz einer Cast-Funktion ORDB und SQL-99-15 IS-K Typhierarchie • Vererbung von Attributen und Methoden – Sub-/Supertyp-Beziehung • Beispiel: Mitarbeiter als spezielle Personen CREATE TYPE MitarbeiterTyp UNDER PersonTyp AS ( PNr INTEGER, Bewerbung CLOB(50K), Bild BLOB(5M), Vorgesetzter REF(MitarbeiterTyp), Projekte REF(ProjektTyp) ARRAY[10], Gehalt Franken ) NOT FINAL METHOD Gehaltserhöhung RETURNS Franken; • keine Mehrfachverbung (maximal ein direkter Supertyp) IS-K ORDB und SQL-99-16 Beispieldefinition einer SQL-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; ORDB und SQL-99-17 IS-K 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 / resignal statement IS-K BEGIN … END; DECLARE var CHAR (6); IF subject (nachr) < > ‘urgent’ THEN … ELSE …; CASE subject (nachr) WHEN ‘SQL’ THEN … WHEN …; LOOP <SQL statement list> END LOOP; WHILE i < 100 DO … END WHILE; REPEAT … UNTIL i < 100 END REPEAT ; FOR result AS … DO … END FOR; RETURN ‘urgent’; CALL procedure_x (1, 3, 5); SET x = ‘abc’; SIGNAL division_by_zero; ORDB und SQL-99-18 Tabellenhierarchie • Extensionale Teilmengen-Beziehung zwischen Sub-/Supertabelle – Alle Instanzen einer Subtabelle sind auch Instanzen der zugehörigen Supertabelle(n) CREATE TABLE Mitarbeiter OF MitarbeiterTyp UNDER Personen (Vorgesetzter WITH OPTIONS SCOPE Mitarbeiter, Projekte WITH OPTIONS SCOPE Projekt); • Typ der Subtabelle muss ein direkter Subtyp des Typs der Supertabelle ORDB und SQL-99-19 IS-K Einfügungen / Löschungen in Tabellenhierarchien • INSERT an Supertabellen propagiert und DELETE wirkt auf Sub- und Supertabellen ! """ #! """ $ % &' (# #! """ $ # # #! """ #! """ $ % &' (# IS-K ORDB und SQL-99-20 Einfache Beispielanfragen (1) INSERT INTO Person VALUES (“Bernstein”, AdressTyp(“Editharing 31”, “Zurich”, 8092, “Schweiz”), NULL, NULL); erzeugt eine Person SELECT * FROM Personen; liefert alle Personen, Personen, auch die Mitarbeiter SELECT * FROM Mitarbeiter; liefert die vollständigen Tupel der Mitarbeiter SELECT * FROM ONLY Personen; liefert alle Personen, Personen, die keine speziellen Personen (z.B. Mitarbeiter) Mitarbeiter) sind IS-K ORDB und SQL-99-21 Einfache Beispielanfragen (2) Dereferenzierung über PfeilPfeil-Operator ->: SELECT * FROM Mitarbeiter WHERE Vorgesetzter->Name = “Bond”; Dereferenzierung mit anschliessendem Komponentenzugriff: Komponentenzugriff: SELECT * FROM Mitarbeiter WHERE Vorgesetzter->Anschrift.PLZ = 65307; Verwendung von CLOBCLOB-Prädikaten: Prädikaten: SELECT Name FROM Mitarbeiter WHERE POSITION('Diplom' IN Lebenslauf) > 0; IS-K ORDB und SQL-99-22 Referenzen & Deferenzierung • Dereferenzierung mittels DEREF-Operator SELECT DEREF(Ehepartner) FROM Mitarbeiter; • Zuweisen von Referenzen in Updates UPDATE Projekt SET Leiter = (SELECT REF(Mitarbeiter) FROM Mitarbeiter WHERE Name = ‘Gates’) WHERE AnzahlMitarbeiter > 10; ORDB und SQL-99-23 IS-K Methoden-/Funktionsaufrufe • in der SELECT-Klausel SELECT Anzahl(Projekte) FROM Mitarbeiter; liefert einen Wert • in der FROM-Klausel SELECT Name FROM GuteMitarbeiter(); liefert eine Menge von Mitarbeitertupel SQL-99 unterstützt nicht diese Variante! • in der WHERE-Klausel SELECT Name FROM Mitarbeiter WHERE Grossverdiener(Gehalt); IS-K liefert TRUE oder FALSE ORDB und SQL-99-24 Rekursive Anfragen CREATE TABLE Flüge ( Abflug VARCHAR(30), Ziel VARCHAR(30), Carrier VARCHAR(30), Preis Franken ); Abflug Zurich Zurich Frankfurt Sydney Paris WITH RECURSIVE Erreichbar(Abflug, Ziel) AS ( SELECT Abflug, Ziel FROM Flüge UNION SELECT e.Abflug, f.Ziel FROM Erreichbar e, Flüge f WHERE e.Ziel = f.Abflug ) SELECT * FROM Erreichbar WHERE Abflug = ‘Zurich’; Ziel Frankfurt London Sydney New York New York Abflug Zurich Zurich Zurich Zurich Carrier SR BA LH TWA AF Preis 499 599 1099 1549 1299 Ziel Frankfurt London Sydney New York ORDB und SQL-99-25 IS-K Diskussion: Kollektionstypen und Typkonversion CREATE TABLE Mitarbeiter ( PNr INTEGER, Name VARCHAR(30), Anschrift AdressTyp, Vorgesetzter INTEGER, Projekte SET (INTEGER), Fachgebiete LIST (VARCHAR (20)) ); SET/ LIST / MULTISET sind a priori keine TABLEs. Sie werden mit UNNEST zu solchen gemacht zum Zwecke der Anfragen SELECT m.Name FROM Mitarbeiter m WHERE ‘Datenbanken’ IN (SELECT * FROM UNNEST(m.Fachgebiete)); Streng genommen müsste hier der String ‘Datenbanken’ ‘Datenbanken’ in ein Tupel umgewandelt werden! werden! IS-K ORDB und SQL-99-26 Diskussion: TABLE innerhalb TABLE CREATE TABLE Abteilungen ( AbtNr INTEGER PRIMARY KEY, Manager INTEGER REFERENCES Mitarbeiter, Projekte TABLE (ProjNr INTEGER, ProjName CHAR (30), Budget DECIMAL (10, 2)) ); Finde die Nummer, Nummer, das Budget, und den durchnittlichen Lohn jeder Abteilung: Abteilung: SELECT a.AbtNr, TABLE(SELECT sum (Budget) FROM a.Projekte), TABLE (SELECT avg (Gehalt) FROM Mitarbeiter m WHERE m.AbtNr = a.AbtNr ) AS avg_sal FROM Abteilungen a; ORDB und SQL-99-27 IS-K Abschliessender Vergleich (1) Konzept RMSDM KL-ONE RM NF 2 OO-Basis ODMG SQL-99 ➼ ➼ ➼ - ➼ - - ➼ ➼ ➼ ➼ ➼ - ➼ ➼ ➼ - Objekttypen atomar/konkret Objekttypen ➼ abstrakte Objekttypen ➼ Subtypen - ➼ ➼ ➼ ➼ konstruierte Objekttypen konstruierte Tupel konstruierte Set - (1) ➼ (➼ ➼) (2) konstruierte List - - - - ➼ - konstruierte Bag - - - - ➼ - konstruierte Array - - - - ➼ ➼ - - - - ➼ Surrogat IS-K ➼ - ORDB und SQL-99-28 Abschliessender Vergleich (2) Konzept RMSDM KL-ONE RM NF 2 OO-Basis ODMG ➼ (➼) SQL3 Objektklassen ➼ benutzerdefiniert durch prädikat P Subklassen P ➼ ➼ (3) ➼ (➼)(4) - - ➼ - - ➼ - - ➼ ➼ ➼ Bemerkungen: (1) Sets treten im RM als Relationen = Menge von (Tupel-)Instanzen auf. Dies sind daher Typenextensionen und erfassen damit benutzerdefinierte Klassen. (2) Sets treten nicht explizit, sondern als mengenwertige Funktionen auf. (3) Objektklassen über CLASS / EXTENT kombination unter INTERFACE (4) In Verbindung mit Rollenrestriktion IS-K ORDB und SQL-99-29 Literatur • ISO/ANSI/IEC 9075-2: Information Technology - Database Languages Languages SQL - Part 2: Foundation (SQL/Foundation), (SQL/Foundation) September 1999 • P. Fortier: SQL3 - Implementing the SQL Foundation Standard, Standard McGrawHill, 1999 • G. Saake, I. Schmitt, C. Türker: Objektdatenbanken - Konzepte, Sprachen, Architekturen, Architekturen International Thomson Publishing, 1997 • A. Heuer: Objektorientierte Datenbanken - Konzepte, Modelle, Standards und Systeme, Systeme Addison-Wesley, 2. Auflage, 1997 • M. Stonebraker, D. Moore: ObjectObject-Relational DBMSs - The Next Great Wave, Wave Morgan Kaufmann, 1996 • A. Meier, T. Wüst: Objektorientierte und objektrelationale Datenbanken Ein Kompass für die Praxis, Praxis dpunkt Verlag, 2. Auflage, 2000 • C. M. Saracco: Universal Database Management - A Guide to Object/Relational Technology, Technology Morgan Kaufmann, 1998 IS-K ORDB und SQL-99-30