![Page 1: Objektrelationale Datenbanken (am Beispiel Oracle)](https://reader036.vdokument.com/reader036/viewer/2022062307/55204d6649795902118bb736/html5/thumbnails/1.jpg)
Objektrelationale Datenbanken(am Beispiel Oracle)
![Page 2: Objektrelationale Datenbanken (am Beispiel Oracle)](https://reader036.vdokument.com/reader036/viewer/2022062307/55204d6649795902118bb736/html5/thumbnails/2.jpg)
© Prof. T. Kudraß, HTWK Leipzig
Objektorientierte 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
![Page 3: Objektrelationale Datenbanken (am Beispiel Oracle)](https://reader036.vdokument.com/reader036/viewer/2022062307/55204d6649795902118bb736/html5/thumbnails/3.jpg)
© Prof. T. Kudraß, HTWK Leipzig
ObjekttypEinführendes Beispiel
– Ist ein benutzerdefinierter zusammengesetzter Datentyp
–Kapselt eine Datenstruktur zusammen mit den benötigten Methoden zur Manipulation
AttributAttribut
MethodeMethode
order_noorder_nocust_infocust_infoline_itemsline_items
amountamount
HoldHold
Ch
eckS
tatu
sC
hec
kSta
tus
Can
celC
ancel
ShipShip
Bestellung
![Page 4: Objektrelationale Datenbanken (am Beispiel Oracle)](https://reader036.vdokument.com/reader036/viewer/2022062307/55204d6649795902118bb736/html5/thumbnails/4.jpg)
© Prof. T. Kudraß, HTWK Leipzig
Objektorientierte 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)
![Page 5: Objektrelationale Datenbanken (am Beispiel Oracle)](https://reader036.vdokument.com/reader036/viewer/2022062307/55204d6649795902118bb736/html5/thumbnails/5.jpg)
© Prof. T. Kudraß, HTWK Leipzig
Struktur eines Objekttyps
MethodenrümpfeMethodenrümpfe
PublicInterface
Private Implementation
AttributdeklarationenAttributdeklarationen
MethodenspezifikationenMethodenspezifikationen
SpezifikationSpezifikation
RumpfRumpf
![Page 6: Objektrelationale Datenbanken (am Beispiel Oracle)](https://reader036.vdokument.com/reader036/viewer/2022062307/55204d6649795902118bb736/html5/thumbnails/6.jpg)
© Prof. T. Kudraß, HTWK Leipzig
Objektorientierte 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
![Page 7: Objektrelationale Datenbanken (am Beispiel Oracle)](https://reader036.vdokument.com/reader036/viewer/2022062307/55204d6649795902118bb736/html5/thumbnails/7.jpg)
© Prof. T. Kudraß, HTWK Leipzig
Objektorientierte 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
![Page 8: Objektrelationale Datenbanken (am Beispiel Oracle)](https://reader036.vdokument.com/reader036/viewer/2022062307/55204d6649795902118bb736/html5/thumbnails/8.jpg)
© Prof. T. Kudraß, HTWK Leipzig
Objektorientierte 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
![Page 9: Objektrelationale Datenbanken (am Beispiel Oracle)](https://reader036.vdokument.com/reader036/viewer/2022062307/55204d6649795902118bb736/html5/thumbnails/9.jpg)
© Prof. T. Kudraß, HTWK Leipzig
Objektorientierte 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
![Page 10: Objektrelationale Datenbanken (am Beispiel Oracle)](https://reader036.vdokument.com/reader036/viewer/2022062307/55204d6649795902118bb736/html5/thumbnails/10.jpg)
© Prof. T. Kudraß, HTWK Leipzig
Objektorientierte 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
![Page 11: Objektrelationale Datenbanken (am Beispiel Oracle)](https://reader036.vdokument.com/reader036/viewer/2022062307/55204d6649795902118bb736/html5/thumbnails/11.jpg)
© Prof. T. Kudraß, HTWK Leipzig
Objektorientierung 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– SQL:1999: Standard mit vielen objektorientierten Erweiterungen
Objektrelationale Mapping-Tools– Brückenschlag zwischen OO Programmiersprachen und RDBMS– Vertreter: EJB, JDO, OJB, Hibernate
![Page 12: Objektrelationale Datenbanken (am Beispiel Oracle)](https://reader036.vdokument.com/reader036/viewer/2022062307/55204d6649795902118bb736/html5/thumbnails/12.jpg)
© Prof. T. Kudraß, HTWK Leipzig
Objektrelationale 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
![Page 13: Objektrelationale Datenbanken (am Beispiel Oracle)](https://reader036.vdokument.com/reader036/viewer/2022062307/55204d6649795902118bb736/html5/thumbnails/13.jpg)
© Prof. T. Kudraß, HTWK Leipzig
Objektrelationale 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)
![Page 14: Objektrelationale Datenbanken (am Beispiel Oracle)](https://reader036.vdokument.com/reader036/viewer/2022062307/55204d6649795902118bb736/html5/thumbnails/14.jpg)
© Prof. T. Kudraß, HTWK Leipzig
Spezifikation eines Objekttyps
CREATE TYPE type_name AS OBJECT[(attribute1 datatype, attribute2 datatype, . . .][MEMBER procedure1 | function1 spec, procedure2 | function2 spec, . . .)]
CREATE TYPE type_name AS OBJECT[(attribute1 datatype, attribute2 datatype, . . .][MEMBER procedure1 | function1 spec, procedure2 | function2 spec, . . .)]
SyntaxSyntax
![Page 15: Objektrelationale Datenbanken (am Beispiel Oracle)](https://reader036.vdokument.com/reader036/viewer/2022062307/55204d6649795902118bb736/html5/thumbnails/15.jpg)
© Prof. T. Kudraß, HTWK Leipzig
Rumpf eines Objekttyps
SyntaxSyntax
CREATE TYPE BODY type_name AS [MEMBER procedure1 | function1 body, procedure2 | function2 body, . . .]
CREATE TYPE BODY type_name AS [MEMBER procedure1 | function1 body, procedure2 | function2 body, . . .]
![Page 16: Objektrelationale Datenbanken (am Beispiel Oracle)](https://reader036.vdokument.com/reader036/viewer/2022062307/55204d6649795902118bb736/html5/thumbnails/16.jpg)
© Prof. T. Kudraß, HTWK Leipzig
Spezifikation 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)
MEMBER PROCEDURE neuerpreis (neupreis varchar2),
MEMBER FUNCTION print RETURN VARCHAR2
) NOT FINAL;
![Page 17: Objektrelationale Datenbanken (am Beispiel Oracle)](https://reader036.vdokument.com/reader036/viewer/2022062307/55204d6649795902118bb736/html5/thumbnails/17.jpg)
© Prof. T. Kudraß, HTWK Leipzig
Rumpf 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.bestellnr:=vbestellnr;
SELF.preis:=vpreis;
SELF.verlag:=‘Spektrum Akademischer Verlag‘;
RETURN;
END;
![Page 18: Objektrelationale Datenbanken (am Beispiel Oracle)](https://reader036.vdokument.com/reader036/viewer/2022062307/55204d6649795902118bb736/html5/thumbnails/18.jpg)
© Prof. T. Kudraß, HTWK Leipzig
Rumpf eines Objekttyps Definition der Methoden (Forts.)
-- Definition der Memberprozedur neuerPreis
MEMBER PROCECURE neuerPreis (neupreis VARCHAR2) IS
BEGIN
SELF.preis:=neupreis;
END;
-- Definition der Memberfunktion printMEMBER FUNCTION print (neupreis VARCHAR2) ISBEGINRETURN ‘Bestellnummer: ‘|| bestellnr || ‘; Preis: ‘ || preis || ‘; Verlag‘ || verlag ; END;-- Ende TypdefinitionEND;
![Page 19: Objektrelationale Datenbanken (am Beispiel Oracle)](https://reader036.vdokument.com/reader036/viewer/2022062307/55204d6649795902118bb736/html5/thumbnails/19.jpg)
© Prof. T. Kudraß, HTWK Leipzig
Definition eines Subtyps
-- Definition eines Subtyps Buch von Katalogeintrag CREATE OR REPLACE TYPE buch UNDER katalogeintrtag(isbn VARCHAR2(13),titel VARCHAR2(300),autor VARCHAR2(30),OVERRIDING MEMBER FUNCTZION print RETURN VARCHAR2);
weitere Details zur Typvererbung später im Skript
![Page 20: Objektrelationale Datenbanken (am Beispiel Oracle)](https://reader036.vdokument.com/reader036/viewer/2022062307/55204d6649795902118bb736/html5/thumbnails/20.jpg)
© Prof. T. Kudraß, HTWK Leipzig
Aufruf von ObjektmethodenSET SERVEROUTPUT ON;
DECLARE
k1 katalogeintrag;
k2 katalogeintrag;
BEGIN
-- Aufruf des Standardkonstruktors
k1:=katalogeintrag(135782,’48,95 €.‘,‘Hanser-Verlag‘);
-- Ausgabe von k1 mittels Memberfunktion PRINT
dbms_output.put_line(k1.print);
-- Aufruf des benutzerdef. Konstruktors von katalogeintrag
k2:=katalogeintrag(879564,’31,70 €‘);
-- Ausgabe von k2 mittels Memberfunktion print
dbms_output.put_line(k2.print);
-- Test der Memberprozedur neuerpreis
k1.neuerpreis(’47,25 €‘);
dbms_output.put_line(k1.bestellnr || ‘ ‘ || k1.preis);
END;
![Page 21: Objektrelationale Datenbanken (am Beispiel Oracle)](https://reader036.vdokument.com/reader036/viewer/2022062307/55204d6649795902118bb736/html5/thumbnails/21.jpg)
© Prof. T. Kudraß, HTWK Leipzig
Verwendung von ObjektenObjekttabellen
CREATE TABLE katalog OF katalogeintrag
(
CONSTRAINT 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;
![Page 22: Objektrelationale Datenbanken (am Beispiel Oracle)](https://reader036.vdokument.com/reader036/viewer/2022062307/55204d6649795902118bb736/html5/thumbnails/22.jpg)
© Prof. T. Kudraß, HTWK Leipzig
Objekttypen 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)
![Page 23: Objektrelationale Datenbanken (am Beispiel Oracle)](https://reader036.vdokument.com/reader036/viewer/2022062307/55204d6649795902118bb736/html5/thumbnails/23.jpg)
© Prof. T. Kudraß, HTWK Leipzig
REF (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 ReferenzDECLARE OrderRef REF TO purchase_order;
SELECT REF(po) INTO OrderRef
FROM purchase_order_table po
WHERE po.id = 1000376;
![Page 24: Objektrelationale Datenbanken (am Beispiel Oracle)](https://reader036.vdokument.com/reader036/viewer/2022062307/55204d6649795902118bb736/html5/thumbnails/24.jpg)
© Prof. T. Kudraß, HTWK Leipzig
Scoped 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;
![Page 25: Objektrelationale Datenbanken (am Beispiel Oracle)](https://reader036.vdokument.com/reader036/viewer/2022062307/55204d6649795902118bb736/html5/thumbnails/25.jpg)
© Prof. T. Kudraß, HTWK Leipzig
Methoden
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 werden2 spezielle Typen von Methoden: MAP und ORDER
![Page 26: Objektrelationale Datenbanken (am Beispiel Oracle)](https://reader036.vdokument.com/reader036/viewer/2022062307/55204d6649795902118bb736/html5/thumbnails/26.jpg)
© Prof. T. Kudraß, HTWK Leipzig
MAP MethodeBeispiel
Abbildung (mapping) von Objekt-Instanzen auf Basisdatentypen, Ordnen durch Aufruf MAP-Methode
obj_1 > obj_2 obj1_map() > 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;
![Page 27: Objektrelationale Datenbanken (am Beispiel Oracle)](https://reader036.vdokument.com/reader036/viewer/2022062307/55204d6649795902118bb736/html5/thumbnails/27.jpg)
© Prof. T. Kudraß, HTWK Leipzig
Varray
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
![Page 28: Objektrelationale Datenbanken (am Beispiel Oracle)](https://reader036.vdokument.com/reader036/viewer/2022062307/55204d6649795902118bb736/html5/thumbnails/28.jpg)
© Prof. T. Kudraß, HTWK Leipzig
Nested 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;
![Page 29: Objektrelationale Datenbanken (am Beispiel Oracle)](https://reader036.vdokument.com/reader036/viewer/2022062307/55204d6649795902118bb736/html5/thumbnails/29.jpg)
© Prof. T. Kudraß, HTWK Leipzig
Multilevel-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
![Page 30: Objektrelationale Datenbanken (am Beispiel Oracle)](https://reader036.vdokument.com/reader036/viewer/2022062307/55204d6649795902118bb736/html5/thumbnails/30.jpg)
© Prof. T. Kudraß, HTWK Leipzig
Storage-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
![Page 31: Objektrelationale Datenbanken (am Beispiel Oracle)](https://reader036.vdokument.com/reader036/viewer/2022062307/55204d6649795902118bb736/html5/thumbnails/31.jpg)
© Prof. T. Kudraß, HTWK Leipzig
Einfü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 ());
![Page 32: Objektrelationale Datenbanken (am Beispiel Oracle)](https://reader036.vdokument.com/reader036/viewer/2022062307/55204d6649795902118bb736/html5/thumbnails/32.jpg)
© Prof. T. Kudraß, HTWK Leipzig
Einfü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.jahrgang=2007)
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.jahrgang=2007)
VALUES (buch(870021, ’49,60 €‘, ‘Spektrum Akademischer Verlag ‘,‘3-8274-1449-0‘, ‘Objektorientierte Programmiersprachen‘,‘Klaus Zeppenfeld‘));
![Page 33: Objektrelationale Datenbanken (am Beispiel Oracle)](https://reader036.vdokument.com/reader036/viewer/2022062307/55204d6649795902118bb736/html5/thumbnails/33.jpg)
© Prof. T. Kudraß, HTWK Leipzig
Entschachteln von Collection Queries (Beispiel)
SELECT e.empname, e.projects FROM employees e;
EMPNAME PROJECTS
------- --------
'Bob' PROJECTS_LIST_NT(14, 23, 144)
'Daphne' PROJECTS_LIST_NT(14, 35)
Beispiel: Zugriff auf Projekte (Nested Table) eines Angestellten
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
![Page 34: Objektrelationale Datenbanken (am Beispiel Oracle)](https://reader036.vdokument.com/reader036/viewer/2022062307/55204d6649795902118bb736/html5/thumbnails/34.jpg)
© Prof. T. Kudraß, HTWK Leipzig
Anfragen auf Collections
SELECT e.empname, p.*
FROM employees e, TABLE(e.projects) p;
EMPNAME PROJECTS
------- --------
'Bob' 14
'Bob' 23
'Bob' 144
'Daphne' 14
'Daphne' 35
Beispiel: Zugriff auf Projekte (Nested Table) eines Angestellten
![Page 35: Objektrelationale Datenbanken (am Beispiel Oracle)](https://reader036.vdokument.com/reader036/viewer/2022062307/55204d6649795902118bb736/html5/thumbnails/35.jpg)
© Prof. T. Kudraß, HTWK Leipzig
Anfragen auf Collections (Forts.)
SELECT *
FROM employee e, TABLE(e.projects);
PROJECTS
-------
14
23
144
14
35
Beispiel: Zugriff auf Projekte (Nested Table) eines Angestellten (Variante ohne Angestelltennamen)
![Page 36: Objektrelationale Datenbanken (am Beispiel Oracle)](https://reader036.vdokument.com/reader036/viewer/2022062307/55204d6649795902118bb736/html5/thumbnails/36.jpg)
© Prof. T. Kudraß, HTWK Leipzig
DML-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;
![Page 37: Objektrelationale Datenbanken (am Beispiel Oracle)](https://reader036.vdokument.com/reader036/viewer/2022062307/55204d6649795902118bb736/html5/thumbnails/37.jpg)
© Prof. T. Kudraß, HTWK Leipzig
Typvererbung (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: ShapeMethode: calculate_area()
2 Subtypen:Rectangle_ShapeCircular_Shapeunterschiedl. Implementierungenvon calculate_area()
![Page 38: Objektrelationale Datenbanken (am Beispiel Oracle)](https://reader036.vdokument.com/reader036/viewer/2022062307/55204d6649795902118bb736/html5/thumbnails/38.jpg)
© Prof. T. Kudraß, HTWK Leipzig
FINAL vs. NOT FINALTypen und Methoden
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;
NOT FINAL: erlaube Subtypen Änderung der FINAL-Eigenschaft über ALTER TYPE FINAL / NOT FINAL auch auf Methoden anwendbar
![Page 39: Objektrelationale Datenbanken (am Beispiel Oracle)](https://reader036.vdokument.com/reader036/viewer/2022062307/55204d6649795902118bb736/html5/thumbnails/39.jpg)
© Prof. T. Kudraß, HTWK Leipzig
Definition von Typhierarchien
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);
Subtypen mittels CREATE TYPE und UNDER-Klausel Beispiele:
![Page 40: Objektrelationale Datenbanken (am Beispiel Oracle)](https://reader036.vdokument.com/reader036/viewer/2022062307/55204d6649795902118bb736/html5/thumbnails/40.jpg)
© Prof. T. Kudraß, HTWK Leipzig
NOT INSTANTIABLETypen und Methoden
CREATE TYPE Address_typ AS OBJECT(...) NOT INSTANTIABLE NOT FINAL; CREATE TYPE USAddress_typ UNDER Address_typ(...); CREATE TYPE IntlAddress_typ UNDER Address_typ(...);
CREATE TYPE T AS OBJECT ( x NUMBER, NOT INSTANTIABLE MEMBER FUNCTION func1() RETURN NUMBER ) NOT INSTANTIABLE NOT FINAL;
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:
![Page 41: Objektrelationale Datenbanken (am Beispiel Oracle)](https://reader036.vdokument.com/reader036/viewer/2022062307/55204d6649795902118bb736/html5/thumbnails/41.jpg)
© Prof. T. Kudraß, HTWK Leipzig
Überladen von Methoden (Overloading)
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(...)... ...);
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)
![Page 42: Objektrelationale Datenbanken (am Beispiel Oracle)](https://reader036.vdokument.com/reader036/viewer/2022062307/55204d6649795902118bb736/html5/thumbnails/42.jpg)
© Prof. T. Kudraß, HTWK Leipzig
Überschreiben von Methoden (Overriding)
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(), ...);
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!)
![Page 43: Objektrelationale Datenbanken (am Beispiel Oracle)](https://reader036.vdokument.com/reader036/viewer/2022062307/55204d6649795902118bb736/html5/thumbnails/43.jpg)
© Prof. T. Kudraß, HTWK Leipzig
Substituierbarkeit (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
![Page 44: Objektrelationale Datenbanken (am Beispiel Oracle)](https://reader036.vdokument.com/reader036/viewer/2022062307/55204d6649795902118bb736/html5/thumbnails/44.jpg)
© Prof. T. Kudraß, HTWK Leipzig
Beispiel: Beschränkung der Substituierbarkeit
Beschränkung der Subtypen, die in Spalte/Attribut erlaubt sind, möglich mittels IS OF type - Constraint
Beispiel:Erzeuge 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);
![Page 45: Objektrelationale Datenbanken (am Beispiel Oracle)](https://reader036.vdokument.com/reader036/viewer/2022062307/55204d6649795902118bb736/html5/thumbnails/45.jpg)
© Prof. T. Kudraß, HTWK Leipzig
Funktionen 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;
![Page 46: Objektrelationale Datenbanken (am Beispiel Oracle)](https://reader036.vdokument.com/reader036/viewer/2022062307/55204d6649795902118bb736/html5/thumbnails/46.jpg)
© Prof. T. Kudraß, HTWK Leipzig
Funktionen 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;
![Page 47: Objektrelationale Datenbanken (am Beispiel Oracle)](https://reader036.vdokument.com/reader036/viewer/2022062307/55204d6649795902118bb736/html5/thumbnails/47.jpg)
© Prof. T. Kudraß, HTWK Leipzig
Funktionen 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
![Page 48: Objektrelationale Datenbanken (am Beispiel Oracle)](https://reader036.vdokument.com/reader036/viewer/2022062307/55204d6649795902118bb736/html5/thumbnails/48.jpg)
© Prof. T. Kudraß, HTWK Leipzig
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)
Funktionen und Prädikate für den Umgang mit Objekten (4)