Kap. 8: Objektrelationale Datenbanken und SQL

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