Title: Objektrelationale Datenbanken (am Beispiel Oracle)
1Objektrelationale Datenbanken(am Beispiel Oracle)
2Objektorientierte KonzepteObjekt
- Objekt
- Einheit von Struktur und Verhalten
- Struktur Attribute / Verhalten Methoden
- Zustand eines Objekts Attributwerte
- Methoden Lesen und Ändern des Zustands
- Kommunikation mit anderen Objekten über Methoden
- persistent vs. transient
- Identität unabhängig von Zustand
- Gehört zu einem Objekttyp
3ObjekttypEinführendes Beispiel
- Ist ein benutzerdefinierter zusammengesetzter
Datentyp - Kapselt eine Datenstruktur zusammen mit den
benötigten Methoden zur Manipulation
Ship
Attribut
order_no cust_info line_items amount
Bestellung
Cancel
CheckStatus
Methode
Hold
4Objektorientierte KonzepteMethoden
- Methode
- Funktion, die auf einem Objekt aufgerufen wird
- Implementiert beliebigen Code
- Bestandteile
- Signatur (Deklaration) Name und Parameter
- Rumpf Implementierung der Funktionalität
- Konstruktur Destruktor
- Besondere Methoden zum Erzeugen und Vernichten
von Objekten - Arten vom Methoden
- lesende
- ändern
- statische (Klassenmethoden)
5Struktur eines Objekttyps
Spezifikation
Attributdeklarationen
Public Interface
Methodenspezifikationen
Rumpf
Methodenrümpfe
Private Implementation
6Objektorientierte KonzepteKapselung
- Kapselung
- Zustand nur über öffentliche (public) Methoden
abfragbar - Nicht öffentliche Methoden und Attribute nur
objektintern zugänglich - Strikte Kapselung
- Zugang nur über get- und set-Methoden (für ein
bestimmtes Attribut) - automatische Generierung der Zugriffsmethoden
7Objektorientierte KonzepteObjektidentität
- OID
- Identifizierendes künstliches Merkmal eines
Objekts - Systemdefinierter Identifikator (Surrogat) vor
Anwender verborgen - Ohne Semantik! (anders als Primärschlüssel)
- Unveränderlich während Lebenszeit des Objekts
- Referenztypen und Methoden zur Arbeit mit OIDs
durch System angeboten - Typen von Gleichheit
- identisch (OIDs gleich)
- flach-gleich (alle Attribute gleich)
- Tiefgleich (Gleichheit gilt auch für alle
referenzierten Objekte) - Kopieren flach vs. tief
8Objektorientierte KonzepteKlasse
- Definition
- Menge von Objekten mit gleichen Attributen
(Merkmalen) und Methoden (Verhalten) - Zwei Sichtweisen
- Intension Beschreibung von Attributen und
Methoden Typ einer Klasse (bzw. Objekttyp) - Extension Menge der aktuell existierenden
Objekte (Instanzen) dieser Klasse - Programmiersprachen
- Z.B. Java / C Klassenbegriff rein intensional
- In Datenbanken Extensionen persistent gespeichert
9Objektorientierte KonzepteSpezialisierung
- Ziel möglichst redundanzfreie Speicherung von
Eigenschaften - Klassen in Sub-/Superklassenbeziehungen
(ISA-Beziehung) - Intensional Subklasse erbt Attribute und
Methoden der Superklasse (Typvererbung) - Extensional Untermengenbeziehung zwischen
Extensionen von Sub- und Superklasse
10Objektorientierte KonzepteSpezialisierung
(Forts.)
- Substituierbarkeit Objekt überall dort
einsetzbar wo auch Superklasse erlaubt ist - Mehrfachspezialisierung
- mehrere Superklassen
- Erfordert Konfliktauflösung beim Erben
gleichnamiger Attribute oder Methoden - Polymorphismus (Überladen) / spätes Binden (late
binding) - Bei Aufruf einer Methode wird die Implementierung
ausgewählt in Abhängigkeit vom aufgerufenen
Objekttyp
11Objektorientierung in Datenbanken
- Objektorientierte Datenbanksysteme
- 1985 1995
- SQL-ähnliche Anfragesprache (OQL Object Query
Language) - Vertreter O2, POET, ObjectStore, Versant,
Objectivity, Ontos, Gemstone - Relationale DBMS behielten Überlegenheit
- Anfrageoptimierung
- Transaktionsverwaltung
- Zugriffskontrolle
- SQL1999 Standard mit vielen objektorientierten
Erweiterungen - Objektrelationale Mapping-Tools
- Brückenschlag zwischen OO Programmiersprachen und
RDBMS - Vertreter EJB, JDO, OJB, Hibernate
12Objektrelationale Konzepte im SQL-Standard
- Typkonstruktoren
- geschachtelte Anwendung beliebig komplexe
Datentypen - Benutzerdefinierte Datentypen
- Distinct-Typen Kopien eines Basisdatentyps unter
eigenem Namen - Strukturierte Typen Attribute und Methoden,
Subtyp-Beziehung möglich - Benutzerdefinierte Casts (Typumwandlungen)
- Benutzerdefinierte Ordnungen
- Typisierte Tabellen
- Basieren auf strukturiertem Typ
- Tabellenhierarchien (Subtabelle steht in
Untermengenbeziehung zur Supertabelle) - Typisierte Sichten
- Basieren auf strukturiertem Typ (liefern
typisierte Tabelle) - Sichtenhierarchien
13Objektrelationale Konzepte in Oracle (Überblick)
- Definition von Objekttypen (CREATE TYPE)
- Objekttypen und Referenzen (REF)
- Methoden
- Collections (VARRAY Nested Table)
- Typvererbung (UNDER)
- Polymorphismus (Overriding, Overloading)
- Funktionen und Prädikate für Objekte (REF, DEREF,
TREAT, IS OF)
14Spezifikation eines Objekttyps
Syntax
CREATE TYPE type_name AS OBJECT (attribute1
datatype, attribute2 datatype, . . . MEMBER
procedure1 function1 spec, procedure2
function2 spec, . . .)
15Rumpf eines Objekttyps
Syntax
CREATE TYPE BODY type_name AS MEMBER procedure1
function1 body, procedure2 function2
body, . . .
16Spezifikation eines Objekttyps (Beispiel)
CREATE OR REPLACE TYPE katalogeintrag AS OBJECT(
bestellnr NUMBER, preis VARCHAR2(10),
verlag VARCHAR2(30), CONSTRUCTOR FUNCTION
katalogeintrag (vbestellnr IN NUMBER, vpreis
IN VARCHAR2) RETURN SELF AS RESULT, MEMBER
PROCEDURE neuerpreis (neupreis varchar2),
MEMBER FUNCTION print RETURN VARCHAR2 ) NOT
FINAL
17Rumpf eines Objekttyps Konstruktormethode
(Beispiel)
CREATE OR REPLACE TYPE BODY katalogeintrag AS --
Definition des benutzerdefinierten
Konstruktors CONSTRUCTOR FUNCTION katalogeintrag
(vbestellnr IN NUMBER, vpreis IN VARCHAR2)
RETURN SELF AS RESULT IS BEGIN
SELF.bestellnrvbestellnr SELF.preisvpreis
SELF.verlagSpektrum Akademischer Verlag
RETURN END
18Rumpf eines Objekttyps Definition der Methoden
(Forts.)
-- Definition der Memberprozedur
neuerPreis MEMBER PROCECURE neuerPreis (neupreis
VARCHAR2) IS BEGIN SELF.preisneupreisEND
-- Definition der Memberfunktion print MEMBER
FUNCTION print IS BEGIN RETURN Bestellnummer
bestellnr Preis preis
Verlag verlag END -- Ende
Typdefinition END
19Definition eines Subtyps
-- Definition eines Subtyps Buch von
Katalogeintrag CREATE OR REPLACE TYPE buch UNDER
katalogeintrtag ( isbn VARCHAR2(13), titel VARCHA
R2(300), autor VARCHAR2(30), OVERRIDING MEMBER
FUNCTION print RETURN VARCHAR2 )
- weitere Details zur Typvererbung später im Skript
20Aufruf von Objektmethoden
SET SERVEROUTPUT ONDECLARE k1
katalogeintrag k2 katalogeintrag BEGIN --
Aufruf des Standardkonstruktors k1katalogeintrag
(135782,48,95 .,Hanser-Verlag) -- Ausgabe
von k1 mittels Memberfunktion PRINT dbms_output.pu
t_line(k1.print) -- Aufruf des benutzerdef.
Konstruktors von katalogeintrag k2katalogeintrag
(879564,31,70 ) -- Ausgabe von k2 mittels
Memberfunktion print dbms_output.put_line(k2.print
) -- Test der Memberprozedur neuerpreis k1.neuerp
reis(47,25 ) dbms_output.put_line(k1.bestellnr
k1.preis) END
21Verwendung von ObjektenObjekttabellen
CREATE TABLE katalog OF katalogeintrag( CONSTRAIN
T katalog_pk PRIMARY KEY(bestellnr) ) --
Einfügen eines DS mittels benutzerdef.
Konstruktor von -- Katalogeintrag INSERT INTO
katalog values (katalogeintrag(879564,31,70
)) -- Einfügen eines DS mittels
Standardkonstruktor von buch INSERT INTO katalog
values (buch(453721, 52,90 , Spektrum
Akademischer Verlag , 3-8274-065-1, Lehrbuch
der Softwaretechnik, Helmut Balzert)) --
Ausgabe der DS des Supertyps SELECT from
katalog -- Ausgabe in Objektform SELECT
VALUE(k) FROM katalog k
22Objekttypen und Referenzen
- REF (Reference)
- logischer Pointer" zu einem Row-Objekt
(Datensatz) - Eingebauter (built-in) Datentyp a row object
- Genutzt für Assoziationen zwischen Objekten
(zusammen mit REF-Collections) keine Foreign
Keys nötig! - Erlaubt einfache Navigation durch Objekte
(Punkt-Notation zum Verfolgen der Pointer)
keine Joins nötig! - Prüfen oder Ändern des referenzierten Objekts
möglich - Lesen einer Kopie eines referenzierten Objekts
- Ändern des REF-Wertes (Verweis auf anderes Objekt
oder Null-Setzen) - dangling reference feststellbar (SCOPE-Klausel
kontrolliert nicht referentielle Integrität)
23REF (Referenztypkonstruktor) Beispiele
CREATE TYPE person AS OBJECT ( name
VARCHAR2(30), manager REF person )
Zugriff auf ein Objekt X des Typs PERSON
x.manager.name
Zugriff auf eine Referenz
DECLARE OrderRef REF TO purchase_order SELECT
REF(po) INTO OrderRef FROM
purchase_order_table po WHERE po.id
1000376
24Scoped REF
- Bei Definition eines REF-Typs Beschränkung der
referenzierten Tabelle möglich (scoped REF) - Vorteile
- Effizienterer Zugriff
- Weniger Speicherverbrauch
- Beispiel
CREATE TABLE people ( id NUMBER(4),
name_obj name_objtyp, address_ref REF
address_objtyp SCOPE is address_objtab,
phones_ntab phone_ntabtyp) NESTED TABLE
phones_ntab STORE AS phone_store_ntab2
25Methoden
- Member-Methoden zum Zugriff auf Objektinstanzen
- SELF Objektinstanz der aufgerufenen Methode
(SELF kann weggelassen werden) - Methoden zum Vergleich von Objekten
- Basisdatentypen Ordnung vordefiniert
- Benutzerdefinierte Typen Basis zum Vergleichen
und Ordnen von Objekten muss definiert werden - ?2 spezielle Typen von Methoden MAP und ORDER
26MAP MethodeBeispiel
- Abbildung (mapping) von Objekt-Instanzen auf
Basisdatentypen, Ordnen durch Aufruf MAP-Methode - obj_1 gt obj_2 ? obj1_map() gt obj2.map()
CREATE TYPE Rectangle_typ AS OBJECT(
len NUMBER, wid NUMBER, MAP MEMBER
FUNCTION area RETURN NUMBER, ... ) CREATE TYPE
BODY Rectangle_typ AS MAP MEMBER FUNCTION area
RETURN NUMBER IS BEGIN RETURN len wid
END area ... END
27Varray
- Geordnete Menge von Datenelementen des gleichen
Datentyps mit variabler Anzahl (v) - Index eines Elements Positions-Nr. im Array
- Beispiel
CREATE TYPE prices AS VARRAY(10) OF NUMBER(12,2)
- Verwendung eines Varray
- Spaltentyp einer Tabelle (damit keine 1NF mehr)
- Attribut eines Objekttyps
- Typ einer PL/SQL Variablen, Parameter oder
Rückgabewert einer Funktion
28Nested Table
- Ungeordnete Menge von Datenelementen des gleichen
Typs - Hat nur eine Spalte (Basistyp oder
benutzerdefiniert) - Kann auch als Multi-Column-Table betrachtet
werden, wenn Elementtyp OBJECT TYPE ist. - Beispiel
-- Definition des Tabellentyps artikel_table_type
für NT CREATE TYPE artikel_table_type AS TABLE OF
katalogeintrag -- Definition einer Tabelle
Publikationen mit NT-Spalte CREATE TABLE
publikationen ( jahrgang NUMBER PRIMARY KEY,
katalogartikel artikel_table_type ) NESTED TABLE
katalogartikel STORE AS artikel_tab
29Multilevel-Collection-Types
- Schachtelung von Collection Types in mehreren
Ebenen - Beliebig komplexe Typen möglich
- Mehrfach geschachtelte Collection Types
- Nested Table of Nested Table Type
- Nested Table of Varray Type
- Varray of Nested Table Type
- Varray of Varray Type
- Nested Table oder Varray of a User-Defined Type
mit Attribut vom Typ Nested Table oder Varray
Type
30Storage-Tables für Nested Tables
- Storage-Table (STORE-Klausel)
- zum Speichern der Zeilen einer Nested Table
- Bei Mehrfachschachtelung auf jeder Ebene
- Bezugnahme auf innere Tabelle möglich (z.B.
artikel_tab) weil Attribut vorhanden
(anderenfalls COLUMN VALUE-Klausel) - Weitere physikalische Attribute
(Speicherungsoptionen) möglich
31Einfügen von Datensätzen bei Nested-Table-Objekten
-- Einfügen von DS in die Tabelle mit Werten für
die NT-Spalte INSERT INTO publikationen VALUES
(2006, artikel_table_type (buch(453721,52,90 ,
Spektrum Akademischer Verlag , 3-8274-065-1,
Lehrbuch der Softwaretechnik, Helmut
Balzert))) -- Einfügen eines DS in die Tabelle
ohne NT-Daten INSERT INTO publikationen VALUES
(2007, artikel_table_type ())
32Einfügen von Datensätzen bei Nested-Table-Objekten
(Forts.)
-- Hinzufügen von Datensätzen zur Nested
Table INSERT INTO TABLE (SELECT
p.katalogartikel FROM publikationen
p WHERE p.jahrgang2007) VALUES
(buch(163241, 84,80 , Spektrum Akademischer
Verlag ,3-8274-0285-9, Lehrbuch der
Objektmodellierung,Heide Balzert)) INSERT
INTO TABLE (SELECT p.katalogartikel FROM
publikationen p WHERE p.jahrgang2007) VALU
ES (buch(870021, 49,60 , Spektrum
Akademischer Verlag ,3-8274-1449-0,
Objektorientierte Programmiersprachen,Klaus
Zeppenfeld))
33Entschachteln von Collection Queries (Beispiel)
- Beispiel Zugriff auf Projekte (Nested Table)
eines Angestellten
SELECT e.empname, e.projects FROM employees e
EMPNAME PROJECTS ------- --------
'Bob' PROJECTS_LIST_NT(14, 23, 144)
'Daphne' PROJECTS_LIST_NT(14, 35)
- Entschachteln von Collections bei Queries
(Unnest) - Umwandeln in Zeilen (Rows)
- TABLE Expression erlaubt die Verwendung einer
Collection in FROM-Klausel - Entspricht einem Join zwischen Nested Table und
der Zeile, die diese enthält
34Anfragen auf Collections
- Beispiel Zugriff auf Projekte (Nested Table)
eines Angestellten
SELECT e.empname, p. FROM employees e,
TABLE(e.projects) p EMPNAME PROJECTS
------- -------- 'Bob' 14 'Bob'
23 'Bob' 144 'Daphne' 14 'Daphne'
35
35Anfragen auf Collections (Forts.)
- Beispiel Zugriff auf Projekte (Nested Table)
eines Angestellten (Variante ohne
Angestelltennamen)
SELECT FROM employee e, TABLE(e.projects)
PROJECTS ------- 14 23 144 14
35
36DML-Befehle auf Collections(Weitere Beispiele)
INSERT INTO TABLE(SELECT e.projects
FROM employees e WHERE e.eno 100)
VALUES (1, 'Project Neptune') UPDATE
TABLE(SELECT e.projects FROM employees e
WHERE e.eno 100) p SET VALUE(p)
project_typ(1, 'Project Pluto') WHERE p.pno
1 DELETE FROM TABLE(SELECT e.projects
FROM employee e WHERE e.eno 100) p
WHERE p.pno 1
37Typvererbung (Type Inheritcance)
- Spezialisierung eines Subtyps
- Hinzufügen neuer Attribute (keine Veränderung
geerbter Attribute) - Hinzufügen neuer Methoden, die im Supertyp nicht
vorhanden sind - Ändern der Implementierung einer geerbten Methode
- Beispiel
Object Type Shape Methode calculate_area() 2
Subtypen Rectangle_Shape Circular_Shape unterschi
edl. Implementierungen von calculate_area()
38FINAL vs. NOT FINALTypen und Methoden
- NOT FINAL erlaube Subtypen
- Änderung der FINAL-Eigenschaft über ALTER TYPE
- FINAL / NOT FINAL auch auf Methoden anwendbar
CREATE TYPE Person_typ AS OBJECT ( ssn NUMBER,
name VARCHAR2(30), address VARCHAR2(100))
NOT FINAL ALTER TYPE Person_typ FINAL
CREATE TYPE T AS OBJECT (..., MEMBER
PROCEDURE Print(), FINAL MEMBER FUNCTION
foo(x NUMBER)... ) NOT FINAL
39Definition von Typhierarchien
- Subtypen mittels CREATE TYPE und UNDER-Klausel
- Beispiele
CREATE TYPE Student_typ UNDER Person_typ (
deptid NUMBER, major VARCHAR2(30)) NOT
FINAL CREATE TYPE Employee_typ UNDER Person_typ
( empid NUMBER, mgr VARCHAR2(30)) CREATE
TYPE PartTimeStudent_typ UNDER Student_typ (
numhours NUMBER)
40NOT INSTANTIABLETypen und Methoden
- NOT INSTANTIABLE Keine Instanzen dieses Typs
möglich (auch keine Konstruktor-Methode) - Auch anwendbar auf Methoden ohne Implementierung
(Platzhalter) ? zugehöriger Typ darf dann auch
noch instanziierbar sein - Beispiele
CREATE TYPE Address_typ AS OBJECT(...) NOT
INSTANTIABLE NOT FINAL CREATE TYPE
USAddress_typ UNDER Address_typ(...) CREATE
TYPE IntlAddress_typ UNDER Address_typ(...) CREA
TE TYPE T AS OBJECT ( x NUMBER, NOT
INSTANTIABLE MEMBER FUNCTION func1() RETURN
NUMBER ) NOT INSTANTIABLE NOT FINAL
41Überladen von Methoden (Overloading)
- Wenn Vielzahl von Varianten der Ausführung einer
Methode - Mehrere Methoden mit gleichem Namen in einem Typ
? Unterscheidung anhand der Signatur - Signatur Methodenname, Anzahl, Typen und
Reihenfolge der Parameter - Beispiel unterschiedliche draw()-Methoden (z.B.
Hinzufügen eines Text-Labels erfordert
zusätzlichen Parameter)
CREATE TYPE MyType_typ AS OBJECT (..., MEMBER
PROCEDURE foo(x NUMBER), ...) NOT FINAL CREATE
TYPE MySubType_typ UNDER MyType_typ (...,
MEMBER PROCEDURE foo(x DATE), STATIC FUNCTION
bar(...)... ...)
42Überschreiben von Methoden (Overriding)
- Redefinition einer geerbten Methode im Subtyp, um
dessen Spezifik zu berücksichtigen - Beispiel Methode calculate_area() (spezielle
Formel bei kreisförmigen Formen gegenüber
Rechtecken) - Überschreibende Methode wird ausgeführt bei
Zugriff auf Instanz des Subtyps - Beim Overriding bleibt Signatur erhalten (anders
als bei Overloading!)
CREATE TYPE MyType_typ AS OBJECT (..., MEMBER
PROCEDURE Print(), FINAL MEMBER FUNCTION foo(x
NUMBER)... ) NOT FINAL CREATE TYPE
MySubType_typ UNDER MyType_typ (...,
OVERRIDING MEMBER PROCEDURE Print(), ...)
43Substituierbarkeit (Substitutability)
- Typen sind substituierbar
- Supertyp substituierbar durch einen seiner
Subtypen - Subtyp-Instanz ist zugleich auch Instanz des
Supertyps - Beispiele
- Lesen von Personen (liefert auch Instanzen der
Subtypen Student, Employee) - Einschränkungen beim Arbeiten in Typhierarchien
(z.B. nur Personen, die keine Studenten sind.. - Substituierbarkeit anwendbar bei
- Attributen
- Spalten
- Zeilen (Rows) bei Object Tables oder Views
- REF zu einem Objekttyp
- Collection-Typen
- Substituierbarkeit kann ausgeschaltet werden
44Beispiel Beschränkung der Substituierbarkeit
- Beschränkung der Subtypen, die in
Spalte/Attribut erlaubt sind, möglich mittels IS
OF type - Constraint - BeispielErzeuge eine Tabelle vom Typ Book_Type,
wobei die Autoren der Bücher ausschließlich
Studenten sein dürfen
CREATE TABLE Student_books OF Book_typ COLUMN
author IS OF (ONLY Student_typ)
45Funktionen und Prädikate für den Umgang mit
Objekten
- VALUE In Tabellen-Alias für Object Table oder
Object ViewOut Objektinstanzen, die in Object
Table oder View als Rows enthalten sind - Beispiele
SELECT VALUE(p) FROM person_table p WHERE
p.name "John Smith" SELECT VALUE(p) FROM
ONLY(Person_v) p UPDATE TABLE (SELECT
e.projects FROM employees e WHERE
e.eno 100) p SET VALUE(p) project_typ(1,
'Project Pluto') WHERE p.pno 1
46Funktionen und Prädikate für den Umgang mit
Objekten (2)
- REF In Tabellen-Alias für Object Table oder
Object ViewOut Referenz zu einer Instanz - Beispiel
SELECT REF(p) FROM Person_v p WHERE p.id
0001
- DEREF liefert die Objekt-Instanz, auf die eine
REF verweist - Beispiel
SELECT DEREF(REF(p)) FROM Person_v p
47Funktionen und Prädikate für den Umgang mit
Objekten (3)
- TREAT
- zur Typanpassung (meist Subtyp statt Supertyp)
- z.B. Behandlung einer Person als Student
- Zwei Anwendungen
- Bei Zuweisungen an Variablen spezialisierter
Typen (Supertyp-Wert ? Subtyp) - Zugriff auf Attribute oder Methoden eines Subtyps
des des deklarierten Typs von Zeile oder Spalte
- Beispiel
SELECT name, TREAT(VALUE(p) AS Student_typ).major
major FROM persons p NAME MAJOR ---- ------
Bob null Joe HISTORY Tim PHYSICS
48Funktionen und Prädikate für den Umgang mit
Objekten (4)
- IS OF type
- Prädikat zum Test, ob Objekt-Instanz zum
jeweiligen Subtyp gehört - Beispiele
SELECT VALUE(p) FROM persons p WHERE VALUE(p) IS
OF (Student_typ) VALUE(p) --------
Student_typ('Joe', 3456, 12, 10000)
PartTimeStudent_typ('Tim', 5678, 13, 1000, 20)
SELECT b.title title, b.author author FROM books
b WHERE b.author IS OF (ONLY Student_typ)
TITLE AUTHOR ----- ------ Business Rules
Student_typ('Joe', 3456, 12, 10000)