Objektrelationale Datenbanken (am Beispiel Oracle)
-
Upload
kunigunde-landt -
Category
Documents
-
view
115 -
download
0
Transcript of Objektrelationale Datenbanken (am Beispiel Oracle)
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
© 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
© 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)
© Prof. T. Kudraß, HTWK Leipzig
Struktur eines Objekttyps
MethodenrümpfeMethodenrümpfe
PublicInterface
Private Implementation
AttributdeklarationenAttributdeklarationen
MethodenspezifikationenMethodenspezifikationen
SpezifikationSpezifikation
RumpfRumpf
© 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
© 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
© 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
© 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
© 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
© 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
© 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
© 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)
© 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
© 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, . . .]
© 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;
© 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;
© 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;
© 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
© 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;
© 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;
© 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)
© 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;
© 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;
© 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
© 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;
© 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
© 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;
© 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
© 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
© 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 ());
© 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‘));
© 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
© 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
© 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)
© 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;
© 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()
© 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
© 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:
© 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:
© 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)
© 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!)
© 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
© 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);
© 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;
© 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;
© 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
© 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)