Persistenzmechanismen
Anforderungen
Transparenz
Interoperabilität
Skalierbarkeit
Transaktionen
Optimierung
Transparenz
Applikationsentwickler arbeiten in gleicher Weise mit transienten und persistenten Objekten
Interoperabilität
Persistente Objekte können auch in anderen als der
Erstellungsumgebung verwendet werden
Speicherung ist vom konkreten Persistenzmechanismus unabhängig
Laufzeitumgebung und persistenter Speicher sind austauschbar
Skalierbarkeit
Auffinden von persistenten Objekten erfolgt ohne vollständiges Durchsuchen des “Objektpools"
Objektserialisierung
Wandle Objekte in einen Bytestrom um
Lege Bytestrom in einer Datei ab
Ist Transparenz bei Objektserialisierung gegeben ?
Nicht gegeben – Klassen müssen von Hand serialisiert/
deserialisiert werden
Ist Interoperabilität bei Objektserialisierung gegeben ?
Nein. Feste Bindung an Java (sogar spezielle Versionsbindung)
Ist Skalierbarkeit bei Objektserialisierung gegeben ?
Nicht gegeben – Objekte müssen vollständig (inkrementelles Laden nicht möglich) im Hauptspeicher deserialisiert werden, um Bedingungen testen zu können
Erfüllt die Objektserialisierung die Anforderungen von Persistenzmechanismen ?
Nein
Objektorientierte DBS
Persistenzalternativen
Persistenz durch explizite Kennzeichnung
Persistenz durch Erreichbarkeit
Persistenz durch Vererbung
Persistenz durch Vererbung
Alle Instanzen einer Klasse, die von einer bestimmten „Wurzelklasse“ erbt
Persistenz durch Erreichbarkeit
Persistenz durch explizite Kennzeichnung
Objektorientierte DBS
Vorteile
Transparenz – kein Paradigmenbruch bei Speicherung
Performance-Vorteile bei sehr komplexen Modellen
Objektorientierte DBS
Nachteile
ODBS deutlich weniger verbreitet als RDBS
DB-Unabhängigkeit u. Abfragesprachen mangelhaft
ODBS halten sich nur bedingt an den Standard
Objektrelationales Mapping
Prinzipielle Idee


OR-Mapping Patterns
Abbildung von Vererbungsbeziehungen
Kriterien
OR-Mapping Patterns
Abbildung von Vererbungsbeziehungen
Abbildungsvarianten
OR-Mapping Patterns
Abbildung von Vererbung: Union Tabelle
Person
Mitarbeiter
Vorgehen
OR-Mapping Patterns
Abbildung von Vererbung: Vertikale Zerlegung
Person
Mitarbeiter
Vorgehen
OR-Mapping Patterns
Abbildung von Vererbung: Horizontale Zerlegung
Person
Mitarbeiter
Vorgehen


Was ist Polymorphie ?
Polymorphie oder Polymorphismus ist ein Konzept in der objektorientierten Programmierung, das ermöglicht, dass ein Bezeichner abhängig von seiner Verwendung Objekte unterschiedlichen Datentyps annimmt.
OR-Mapping Patterns
Polymorphie – Variante 1

OR-Mapping Patterns
Polymorphie – Variante 2

OR-Mapping Patterns
Polymorphie – Variante 1
Vor- und Nachteile
Wie bei Union
OR-Mapping Patterns
Polymorphie – Variante 2
Vor- und Nachteile
Wie bei Horizontale Zerlegung
OR- Mapping Patterns
Globale Attribute Abbildungen
Vergleich der Persistenzmechanismen

Nachteile von OR-Mapping Middleware
OO Modell ist mächtiger als relationales Modell
Abbildungsprobleme z.B. bei
Komplexe Objekte müssen in Komponenten zerlegt und auf viele Tabellen verteilt werden
OO Modell ist mächtiger als relationales Modell
Ja
Relationales Modell ist mächtiger als OO Modell
Nein
Synthese OO + RDB =
ORDB
Relationales Datenmodell bzw. RDBS
Vorteile:
Objektorientiertes
Datenmodell
Vorteile:
Vorteile:
ORDBS
Vorteile:
Vorteile:
Zwei Hauptziele von ORDBS
Evolutionäre Erweiterung relationaler DBS
Aufwärtskompatibilität basierend auf SQL
Integration objektorientierter Konzepte
Vereinigung der Vorteile relationaler und
objektorientierter Konzepte, ohne bewährte SQLKonzepte aufzugeben


Neue Typkonstruktoren
Weiterentwicklung – NF^2-Datenmodell
Was ist hierbei erlaubt ?
Geschachtelte Relationen erlaubt
l d.h. relationenwertige Attribute
l "Non-First-Normal-Form" – NF2
NF^2 heißt
"Non-First-Normal-Form"
Neue Typkonstruktoren
Tupeltyp –ROW Konstruktor
Erzeugen eines Tupels mit dem Tupelkonstruktor
l heisst genauso wie der Tupeltypkonstruktor ROW[werteliste]
ROW('Seestrasse', 31, 8008, 'Zürich', 'Schweiz')
Neue Typkonstruktoren
Tupeltyp –ROW Zugriff
Zugriff auf ein Tupelfeld mittels Punktnotation
SELECT Name, Anschrift.ORT
FROM MitarbeiterTupeltabelle
UPDATE MitarbeiterTupeltabelle
SET Anschrift.Ort = 'Linz'
WHERE Anschrift.Ort = 'Wien;
Neue Typkonstruktoren
Tupeltyp –ROW Vergleich zweier Tupel
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
Neue Typkonstruktoren
Arraytyp – ARRAY Konstruktor
Datentyp zur Speicherung mehrerer Werte für ein Attribut
Konstruktor: ARRAY[elementliste]
INSERT INTO MitarbeiterTupeltabelle(Sprachkenntnisse)
VALUES (ARRAY['Deutsch', 'Englisch']);
Neue Typkonstruktoren
Arraytyp – ARRAY Elementzugriff
Direkter Elementzugriff: myArray[2]
SELECT Sprachkenntnisse[2]
FROM MitarbeiterTupeltabelle;
Neue Typkonstruktoren
Arraytyp – ARRAY Entschachtelung
Entschachtelung: UNNEST transformiert Array in Tabelle
SELECT s.*
FROM MitarbeiterTupeltabelle,
UNNEST(Sprachkenntnisse) s (Sprache)
Tabelle „s“ mit
einzigem Attribut
„Sprache“
Neue Typkonstruktoren
Arraytyp – ARRAY Konkatenation zweier Arrays
Konkatenation zweier Arrays: ||
ARRAY['Deutsch', Türkisch'] || ARRAY['Englisch']
-- erzeugt ARRAY['Deutsch', Türkisch', 'Englisch']
Neue Typkonstruktoren
Arraytyp – ARRAY Änderung eines einzelnen Elements
Änderung eines einzelnen Elements
UPDATE MitarbeiterTupeltabelle
SET Sprachkenntnisse[1] = 'Türkisch';
Neue Typkonstruktoren
Arraytyp – ARRAY Änderung des kompletten Arraywerts
Änderung des kompletten Arraywerts
UPDATE MitarbeiterTupeltabelle
SET Sprachkenntnisse = ARRAY['Türkisch'];
Neue Typkonstruktoren
Arraytyp – ARRAY Kardinalität – Anzahl der Arrayelemente
Kardinalität – Anzahl der Arrayelemente
CARDINALITY(ARRAY['Deutsch', Türkisch'])
-- liefert den Wert 2
Neue Typkonstruktoren
Arraytyp – ARRAY Vergleich zweier Arrays
Vergleich zweier Arrays
möglich g.d.w. ihre Elementtypen vergleichbar sind
Zwei vergleichbare Arrays A1 und A2 sind gleich (A1=A2) g.d.w
(1) sie die gleiche Kardinalität besitzen und
(2) alle Elemente paarweise gleich sind
Neue Typkonstruktoren
Multimengentyp – MULTISET Konstruktor
Ungeordnet, mit Duplikaten – Konstruktor:
MULTISET()
MULTISET(17, 4, 7, 4)
Neue Typkonstruktoren
Multimengentyp – MULTISET Entschachtelung
Entschachtelung
UNNEST-Operator transformiert Multiset in Tabelle
Aus einer Anfrage erzeugte Multimenge
MULTISET(SELECT f.nichtAnwesend
FROM MitarbeiterTupeltabelle,
UNNEST(Fehltage) f (nichtAnwesend);
Elementtyp wird durch Zeilentyp der Tabelle bestimmt
Neue Typkonstruktoren
Multimengentyp – MULTISET Operatoren auflisten
Duplikateliminierung, Elementtest, Mengenoperatoren, etc.
Neue Typkonstruktoren
Referenztyp – REF
Zur Bildung eines Objekt-IDs (unveränderlich – OID)
l = Referenz auf ein Objekt in einer Objekt-Tabelle
REF (strukturierter Typ)
[SCOPE gültigkeitsbereich]
Gültigkeitsbereich: bestimmte Tabelle(n) oder alle Tabellen
Neue Typkonstruktoren
Referenztyp – REF Dereferenzierung
Dereferenzierung -> Operator
liefert EINZELNE Referenzattributwerte
SELECT Abteilung->Name
FROM MitarbeiterTupeltabelle;
Neue Typkonstruktoren
Referenztyp – REF Referenzauflösung
Referenzauflösung DEREF-Operator
liefert ALLE Attributwerte des referenzierte Objekts
SELECT DEREF(Abteilung)
FROM MitarbeiterTupeltabelle;
Neue Typkonstruktoren
Referenztyp – REF Referenzauflösung vs Dereferenzierung
Referenzauflösung DEREF-Operator
liefert ALLE Attributwerte des referenzierte Objekts
Dereferenzierung -> Operator
liefert EINZELNE Referenzattributwerte
Benutzerdefinierte Typen
Zwei Arten
Distinct-Typen
l Kopie eines existierenden Datentyps mit neuem Namen
Strukturierte Typen
l Typkonstruktor für benannte, strukturierte Datentypen
Distinct-Typen
Kopie eines existierenden Datentyps mit neuem Namen
Benutzerdefinierter Datentyp, der eine Kopie eines
Basisdatentyps unter einem neuen Namen ablegt
l Wiederverwendung
l Strenge Typisierung (basiert auf Namensäquivalenz)
l Obligates (!) Schlüsselwort FINAL schließt Subtypbildung aus
l Systemdefinierte Vergleichsoperatoren basierend auf dem Quelltyp
l Cast-Operatoren zur Konversion zwischen Distinct- und Quelltyp
Strukturierte Typen
Typkonstruktor für benannte, strukturierte Datentypen
Benutzerdefinierte Typen
Distinct-Typen Vergleich/Zuweisung ??
Kein Vergleich/Zuweisung von Attributen verschiedener
Distinct-Typen (auch wenn gleicher Basisdatentyp!)
CREATE TYPE Dollar AS DECIMAL (12,2) FINAL;
CREATE TYPE Euro AS DECIMAL (12,2) FINAL;
CREATE TABLE Konto (
standAusland Dollar,
standInland Euro)
Attribute nicht vergleichbar – Typkonflikt!
Benutzerdefinierte Typen
Distinct- Typen – Cast-Funktionen
Explizite Konvertierung zum gemeinsamen Quelltyp
ELECT k.standDollar
FROMKonto k
WHERECAST(k.standDollar AS DECIMAL(12,2)) >
CAST(k.standEuro AS DECIMAL(12,2));
Benutzerdefinierte Cast-Funktion zur Wert-Konvertierung
l Schritt 1:
¡ Stored Procedure definieren, die Konvertierung vornimmt
l Schritt 2:
¡ CREATE CAST (Dollar AS Euro) WITH Name_of_stored_procedure
l Schritt 3:
¡ Erneuter Vergleich auf Basis der benutzerdefinierten Cast-Funktion
Impliziter Aufruf der Cast-Funktion bei Vergleichen möglich
l Definition wie in Schritt 2 oben inkl. Schlüsselwort
„AS ASSIGNMENT“
Benutzerdefinierte Typen
Distinct- Typen – Cast-Funktionen
Impliziter Aufruf der Cast-Funktion bei Vergleichen
Impliziter Aufruf der Cast-Funktion bei Vergleichen möglich
l Definition wie in Schritt 2 oben inkl. Schlüsselwort
„AS ASSIGNMENT“
Benutzerdefinierte Typen
Distinct- Typen – Cast-Funktionen
Benutzerdefinierte Cast-Funktion zur Wert-Konvertierung
l Schritt 1:
¡ Stored Procedure definieren, die Konvertierung vornimmt
l Schritt 2:
¡ CREATE CAST (Dollar AS Euro) WITH Name_of_stored_procedure
l Schritt 3:
¡ Erneuter Vergleich auf Basis der benutzerdefinierten Cast-Funktion
Benutzerdefinierte Typen
Distinct- Typen – Cast-Funktionen
Explizite Konvertierung zum gemeinsamen Quelltyp
ELECT k.standDollar
FROMKonto k
WHERECAST(k.standDollar AS DECIMAL(12,2)) >
CAST(k.standEuro AS DECIMAL(12,2));
Benutzerdefinierte Typen
Strukturierte Typen
Benutzerdefinierter Datentyp, der einem Objekttyp mit Attributen und Methoden entspricht
CREATE TYPE <typname>
AS (Attributdefinitionsliste)
[[NOT] INSTANTIABLE]
[NOT] FINAL
[Referenzgenerierung [Referenzcasting]]
[Methodendeklarationsliste]
Ein strukturierter Typ heißt Wurzeltyp, wenn
wenn er keinen Supertyp besitzt
Welcher benutzerdefinierter Datentyp, entspricht einem Objekttyp mit Attributen und Methoden ?
Strukturierte Typ
Benutzerdefinierte Typen
Strukturierte Typen
Optionale Angaben
Optionale Angaben
Instanziierung verbieten (abstrakter Typ)
l FINAL-Klausel erlaubt bzw. verbietet Subtypbildung
l Bestimmen der Referenzgenerierung (OID-Erzeugung) –Angabe nur bei Wurzeltyp möglich – gilt für alle Subtypen!
l Objektverhalten in Methoden kodieren
Benutzerdefinierte Typen
Strukturierte Typen – Referenzgenerierung
REF IS oid USER GENERATED
REF IS oid SYSTEM GENERATED
REF IS oid DERIVED (attributliste)
ID wird abgeleitet von anderen Attributen (z.B. PK)
Benutzerdefinierte Typen
Strukturierte Typen – Einsatzmöglichkeiten
Benutzerdefinierte Typen
Strukturierte Typen – Einsatzmöglichkeiten
Basisdatentypen
CREATE TYPE AdressTyp AS
(
)
CREATE TYPE AdressTyp AS (
strasse VARCHAR(30),
nr DECIMAL(4),
plz DECIMAL(5),
ort VARCHAR(40),
land VARCHAR(25)
)
NOT FINAL;
Benutzerdefinierte Typen
Strukturierte Typen – Einsatzmöglichkeiten
Strukturierter Typ (Einbettung)
Strukturierter Typ (ein- und mehrwertige Referenzen)
CREATE TYPE AdressTyp AS (
strasse VARCHAR(30),
nr DECIMAL(4),
plz DECIMAL(5),
ort VARCHAR(40),
land VARCHAR(25)
)
NOT FINAL;
CREATE TYPE PersonTyp AS
(name ___ erzeuge einen Basisdatentyp
anschrift ___ Einbettung eines strukturierten Typs
ehepartner ___ struk. Typ einwertige Referenzen
kinder___ struk. Typ mehrwertige Referenzen
)
NOT FINAL
REF IS SYSTEM GENERATED;
CREATE TYPE PersonTyp AS(
name VARCHAR30),
anschrift AdressTyp
ehepartner REF(PersonTyp),
kinder REF(PersonTyp) ARRAY[10]
)
NOT FINAL
REF IS SYSTEM GENERATED;
Benutzerdefinierte Typen
Strukturierte Typen – Instanzerzeugung
CREATE FUNCTION AdressTyp (s VARCHAR(30),
n DECIMAL(4),
p DECIMAL(5),
o VARCHAR(40),
l VARCHAR(25))
RETURNS AdressTyp
RETURN AdressTyp().Strasse(s).Nr(n).PLZ(p).Ort(o).Land(l);
CREATE FUNCTION PersonTyp (n VARCHAR(30), a AdressTyp)
RETURNS PersonTyp
BEGIN
DECLARE p PersonTyp;
SET p = PersonTyp();
SET p.Name = n;
SET p.Anschrift = a;
...
RETURN p;
END;
Benutzerdefinierte Typen
Strukturierte Typen – Instanzerzeugung
Definition + Nutzung eines überladenen Konstruktors
Person
CREATE FUNCTION PersonTyp (n VARCHAR(30), a AdressTyp)
RETURNS PersonTyp
BEGIN
DECLARE p PersonTyp;
SET p = PersonTyp();
SET p.Name = n;
SET p.Anschrift = a;
...
RETURN p;
END;
Benutzerdefinierte Typen
Aufbau von Typhierarchien
Subtypdefinition mittels
UNDER-Klausel
Benutzerdefinierte Typen
Was sind Methoden ?
Methoden sind Prozeduren, die zu einem strukturierten Typ gehören
Benutzerdefinierte Typen
Wo erfolgt die Deklaration einer Methode ?
Deklaration erfolgt innerhalb der Typdefinition
Benutzerdefinierte Typen
Methoden
Overloading, Overriding und Late Binding
Besonderheiten:
Benutzerdefinierte Typen
Methoden
Getrennte Spezifikation von
getrennte Spezifikation von Signatur und Implementierung
Benutzerdefinierte Typen
Methoden
Welche Methoden werden automatisch generiert ?
automatisch generierte set/get-Methoden für alle Attribute
eines Typs – Kapselung!
Benutzerdefinierte Typen
Methoden
Overloading, Überladen von Methodennamen
mehrere gleichnamige Methoden mit unterschiedlichen Parametern
Benutzerdefinierte Typen
Methodenimplementierung
REATE TYPE PersonTyp AS (
...
) NOT FINAL
METHOD AnzahlKinder() RETURNS INTEGER;
CREATE METHOD AnzahlKinder()
RETURNS INTEGER
FOR PersonTyp
BEGIN
...
END;
Benutzerdefinierte Typen
Zusammenfassung
Distinct-Typen
Distinct-Typen als Kopien vorhandener Typen
l Strenge Typisierung
l Typkompatibilität über Namensäquivalenz
Benutzerdefinierte Typen
Zusammenfassung
Strukturierte Typen
Strukturierte Typen als abstrakte Objekttypen
Alternative zu Tupel-Tabellen
Typisierte Tabellen
Attribute von Tupel-Tabellen können ____?
Attribute können nur Basisdatentypen sein und Tupel speichern
„Typisierte Tabellen“ bzw. „Objekt-Tabellen“
Tabellentyp wird durch ___________ festgelegt
Tabellentyp wird durch strukturierten Typ festgelegt
Attribute von „Typisierten Tabellen“ bzw. „Objekt-Tabellen“ können ____?
Attribute können array-, multimengen-, tupel-, objekt- und
referenzwertig sein
Attribute von „Typisierten Tabellen“ bzw. „Objekt-Tabellen“ vs
Attribute von Tupel-Tabellen
Attribute von „Typisierten Tabellen“ können array-, multimengen-, tupel-, objekt- und referenzwertig sein
Attribute von Tupel-Tabellen können nur Basisdatentypen sein und Tupel speichern
Zeilen von „Typisierten Tabellen“ bzw. „Objekt-Tabellen“ vs
Zeilen von Tupel-Tabellen
Zeilen von „Typisierten Tabellen“ bzw. „Objekt-Tabellen“
Zeilen von Tupel-Tabellen
sind Tupeln
Auch Tupel-Tabellen können seit SQL:1999 nicht-atomare Attribute aufweisen
Allerdings werden weiterhin nur Tupel gespeichert, keine Objekte D.h. kein OID, keine Methoden, keine Subtabellen, etc.
Methoden können über __________________ von ____ auf Zeilen aufgerufen werden
Methoden können über
Dereferenzierung von OIDs auf Zeilen aufgerufen werden
Können Tupel-Tabellen können nicht-atomare Attribute aufweisen ?
Ja
Auch Tupel-Tabellen können seit SQL:1999 nicht-atomare Attribute aufweisen
Typisierte Tabellen
Subtabellen
Subtabellendefinition
Subtabellendefinition mittels UNDER-Klausel
CREATE TABLE SubTabName OF TypName
UNDER SuperTabName
[(SpaltenName WITH OPTIONS Options)];
SCOPE TypisierteTabelle
| DEFAULT Wert
| Integritätsbedingung
Subtabelle hat ______ Supertabelle/n
Subtabelle hat genau eine direkte Supertabelle
Typ der Subtabelle muss _____
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
Alle Zeilen der Subtabelle sind in der Supertabelle sichtbar
Ja
allerdings nur supertypspezifische Spalten
Typisierte Tabellen
Subtabellen
ypisierte Tabellen
Tiefe und flache Extensionen
Tiefe Extension
l alle Objekte einer Tabelle inkl. der Objekte der Subtabellen
Flache Extension
l ohne Objekte der Subtabellen
SELECT * FROM ONLY(<supertabelle>);