Oberseminar Moderne Datenbanken WS03/04 Objektrelationale Datenbanken Erweiterungsmöglichkeiten von relationalen Datenbanken um objektorientierte Konzepte
Gliederung Einführung Übersicht SQL:1999 & SQL:2003 Allgemeine Konzepte Large Object Benutzerdefinierte Typen Typisierte Tabellen/Sichten OO-Konzepte in Oracle9i 14.11.2003 Christina Böttger
Definition ORDBMS = RDBMS + OODBMS ORDBMS ist Erweiterung relationaler DBMS mit objektorientieren Konzepten Grundkonstrukte semantischer Datenmodelle und Einführung (abstrakter) Benutzerdatentypen ORDBMS = RDBMS + OODBMS 14.11.2003 Christina Böttger
Grenzen bei RDB Unzureichende Vielfalt an Datentypen nur eine Art von Beziehungen („gehört zu“) keine Unterstützung komplexer Datenstrukturen Fehlendes Verhalten Keine Unterstützung von Objekt-Hierarchien (Vererbung) 14.11.2003 Christina Böttger
Objektorientierte Konzepte Neue Datentypen Komplexe Objekte Vererbung Polymorphismus Speichern von Operationen Benutzerdefinierbare Zugriffsmethoden 14.11.2003 Christina Böttger
Erweiterungen in SQL:1999 und SQL:2003 (1) Trigger Neue Basisdatentypen: BOOLEAN,BLOB,CLOB,BIGINT Neue Typkonstruktoren: ROW, ARRAY,REF, MULTISET Benutzerdefinierte Datentypen (Distinct-Typ und strukturierte Typen) 14.11.2003 Christina Böttger
Erweiterungen in SQL:1999 und SQL:2003 (2) Typhierarchien (Subtypen) Typisierte Tabellen und Tabellen-hierarchien (Subtabellen) Typisierte Sichten und Sichthierarchien (Subsichten) Rekursion Generierte Spalten, Sequenz-generatoren,Identitätsspalten 14.11.2003 Christina Böttger
Neue Basisdatentypen BLOB CLOB BFILE
Large Object (LOB) BLOB (Binary Large Object) Bilder/Audio Variable Länge bis 4GB CLOB (Character Large Object) Alphanumerische Zeichenkette BFILE (Binary File) Lokator auf externe Datei Dateigröße bis zu 4GB 14.11.2003 Christina Böttger
Operationen auf Large Object EMPTY_BLOB EMPTY_CLOB BFILENAME IS [NOT] NULL Nicht erlaubt BLOB/CLOB-Attribute als Teil eines Schlüssels oder in booleschen arith. Ausdrücken (Vergleich) GROUP BY, ORDER BY 14.11.2003 Christina Böttger
Beispiel LOB-Typen EMPTY_BLOB() bzw. EMPTY_CLOB() initialisieren CREATE DIRECTORY MITARBEITER_BILDER AS ‘D:\Image\’ ; INSERT INTO MitarbeiterTupelTabelle VALUES ( ‘Billy’, EMPTY_BLOB(), BFILENAME(‘MITRBEITER_BILDER’, billy.gif’), EMPTY_CLOB(), BFILENAME(‘MITARBEITER_BEWERBUNG’,’billy.rtf’) ); EMPTY_BLOB() bzw. EMPTY_CLOB() initialisieren LOB-Lokator (notwenig) 14.11.2003 Christina Böttger
Benutzerdefinierte Datentypen (UDT) Distinct – Datentypen Strukturierte Datentypen (Datentypen mit interner Struktur)
Distinct – Typen(1) Kopie eines existierten Basistypen mit neuem Namen 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 14.11.2003 Christina Böttger
Distinct-Typen(2) Erzeugen eines Distinct-Typs: SQL:1999 und SQL:2003 Distinct-Typen(2) Erzeugen eines Distinct-Typs: CREATE TYPE Distinct-Typname AS (Quelltyp) FINAL Beispiele: CREATE TYPE Franken AS DECIMAL(12,2) FINAL; CREATE TYPE Euro AS DECIMAL(12,2) FINAL; test 14.11.2003 Christina Böttger
Operationen auf Distinct-Typen 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 Erzeugen einer Instanz eines Distinct-Typs: Distinct-Typname(Quelltypwert) Franken(1311.69) Euro(170470.13) Beispiele für Distinct-Werte: 14.11.2003 Christina Böttger
Strukturierte Typen Objekttypen mit Attributen und Methoden SQL:1999 und SQL:2003 Strukturierte Typen Objekttypen mit Attributen und Methoden Bilden Typhierarchien (Einfachvererbung) Defaultwerte und Integritätsbedingungen nicht unterstützt CREATE TYPE PersonTyp AS ( Name VARCHAR(30), Anschrift AdressTyp, Ehepartner REF(PersonTyp), Kinder REF(PersonTyp)ARRAY[10] )NOT FINAL; METHOD AnzahlKinder RETURNS INTEGER; Datentypen mit interner Struktur 14.11.2003 Christina Böttger
Einkapselung von strukturierten Typen Attribute behandelt wie Methoden (Funktionen) Vollständige Einkaspelung Attrubite nur über Methoden zugreifbar Sichtbarkeitsstufen: PUBLIC und PRIVATE Jedes Attribut besitzt Observer – Funktion zum Lesen Mutator – Funktion zum Ändern 14.11.2003 Christina Böttger
Instanz strukturierte Typen Erzeugen einer Instanz mit Default-Konstruktor: Typname() Initialisierung mittels Mutator oder überladenen Konstruktor CREATE FUNCTION PersonTyp (n VARCHAR(30)) RETURNS PersonTyp BEGIN DECLARE p PersonTyp; SET p = PersonTyp(); SET p.Name = n; RETURN p; END; 14.11.2003 Christina Böttger
Typisierte Tabellen und Typisierte Sichten
Typisierte Tabellentyp(1) basiert auf strukturierte Types Instanzen (Zeilen) sind Objekte dieses Typs Tabellennamen OID-Spalte Spalten(Columns) = Attribute R OID A1 ... An OIDs sind vom Typ REF(ST) Zeilen(Row) = Objekte Attributewerte 14.11.2003 Christina Böttger
Typisierte Tabellentyp(2) Syntax: (Beispiel) CREATE TABLE Personen OF PersonTyp ( REF IS oid SYSTEM GENERATED, Ehepartner WITH OPTIONS SCOPE Person, Kinder WITH OPTIONS SCOPE Person, ); Spaltenoption: Spaltenname WITH OPTIONS Optionsliste Option: SCOPE Typisierte Tabelle | DEFAULT Wert | Integritätsbedinung 14.11.2003 Christina Böttger
Typisierte Sichten(1) Analog zu typisierten Tabellen auf einen strukturierten Typ Syntax: CREATE VIEW GutBezahlteMitarbeiter OF MitarbeiterTyp AS ( SELECT * FROM ONLY(Manager), WHERE Gehalt > Franken(10000) ); 14.11.2003 Christina Böttger
Typisierte Sichten(2) Einschränkung nur eine Tabelle oder Sicht enthalten Tabelle bzw. Sicht typisiert, beschränkter Zugriff auf flache Extension (ONLY) Verbundsoperationen und Gruppierung nicht erlaubt 14.11.2003 Christina Böttger
Objektrelationale Erweiterungen in Oracle9i Neue Basistypen(LOB zusätzl. NCLOB, kein BOOLEAN) Referenztypkonstruktor Benutzerdefinierte Datentypen Kollektionstypen Tabellentyp Variabler Arraytyp (VARRAY) Objekttypen Objekttabellen Objektsichten (mit Subsichtenbildung) 14.11.2003 Christina Böttger
Objekttypen Drei Typarten Objekttypen TabellenTyp VARRAY-Typen CREATE TYPE <Typ> [AS OBJECT . . .]; CREATE TYPE <Typ> [AS TABLE . . .]; CREATE TYPE <Typ> [AS VARRAY . . .]; 14.11.2003 Christina Böttger