48
Objektrelationale Datenbanken (am Beispiel Oracle)

Objektrelationale Datenbanken (am Beispiel Oracle)

Embed Size (px)

Citation preview

Page 1: Objektrelationale Datenbanken (am Beispiel Oracle)

Objektrelationale Datenbanken(am Beispiel Oracle)

Page 2: Objektrelationale Datenbanken (am Beispiel Oracle)

© 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)

© 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)

© 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)

© 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)

© 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)

© 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)

© 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)

© 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)

© 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)

© 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)

© 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)

© 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)

© 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)

© 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)

© 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)

© 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)

© 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)

© 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)

© 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)

© 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)

© 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)

© 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)

© 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)

© 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)

© 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)

© 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)

© 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)

© 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)

© 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)

© 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)

© 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)

© 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)

© 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)

© 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)

© 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)

© 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)

© 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)

© 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)

© 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)

© 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)

© 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)

© 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)

© 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)

© 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)

© 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)

© 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)

© 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)