Strukturierte Objekttypen

Werbung
4. Objektrelationales Typsystem
Objekttypen
Strukturierte Objekttypen
Der Typ t approxmatch row des letzten Beispiels ist ein sogenannter Objekttyp.
Definition: Ein Objekttyp ist ein Datentyp, bei dem (u.U. verschiedene) bekannte Datentypen zu einem neuen Datentyp zusammengefasst werden.
• Der Einsatz eines Objekttyps bietet sich an, wenn auf strukturierte Werte überwiegend als Ganzes zugegriffen wird.
• Insbesondere wird so Konsistenz im Datenbankschema für die einzelnen Attribute
(bzw. Instanzvariablen) des Objekttyps hergestellt.
Objektrelationale Datenbanksysteme — Hochschule Bonn-Rhein-Sieg, SS 2010
170
4. Objektrelationales Typsystem
Objekttypen
Definition eines Objekttyps
Ähnlich einer Tabellendefinition:
CREATE TYPE objekttyp AS OBJECT (
attribut1 datentyp1 ,
...
attributN datentypN
);
/
• Die Vereinbarung eines Objekttyps ist in Oracle stets eine PL/SQL-Anweisung!
• Daher im Beispiel das “/”.
Objektrelationale Datenbanksysteme — Hochschule Bonn-Rhein-Sieg, SS 2010
171
4. Objektrelationales Typsystem
Objekttypen
Löschen von Typdefinitionen
• Gegenstück zu CREATE TYPE ist:
DROP TYPE objekttyp [FORCE]
• FORCE ermöglicht ein Löschen, obwohl abhängige Datenbankobjekte existieren.
Objektrelationale Datenbanksysteme — Hochschule Bonn-Rhein-Sieg, SS 2010
172
4. Objektrelationales Typsystem
Objekttypen
Beispiel: Objekttyp für Adressen
create type t_anschrift as object (
strasse varchar2(50),
hausnr varchar2(4),
plz
char(5),
ort
varchar2(30)
);
create table kunden (
k_nr number(6) primary key,
k_name varchar2(50) not null,
k_anschrift t_anschrift not null
);
Objektrelationale Datenbanksysteme — Hochschule Bonn-Rhein-Sieg, SS 2010
173
4. Objektrelationales Typsystem
Objekttypen
Constraints
• Bei der Typdefinition können keine Constraints für die Attribute definiert werden.
• Bei Tabellendefinition sind Constraints wie üblich mit Hilfe von CHECK definierbar.
• Man beachte: NOT NULL bei einem Relationsattribut mit Objekttyp vehindert nicht,
dass die Instanzattribute den Wert NULL annehmen können!
CREATE TABLE kunden (
...
CONSTRAINT CHECK (k_anschrift.strasse IS NOT NULL AND ...)
);
Objektrelationale Datenbanksysteme — Hochschule Bonn-Rhein-Sieg, SS 2010
174
4. Objektrelationales Typsystem
Objekttypen
Beispiel: Verschachtelte Objekttypen
create type Point2D as object (
x number,
y number
);
create type Box2D as object (
lowleft Point2D,
upright Point2D
);
Objektrelationale Datenbanksysteme — Hochschule Bonn-Rhein-Sieg, SS 2010
175
4. Objektrelationales Typsystem
Objekttypen
Optionen bei der Typdefinition
• NOT INSTANTIABLE
entspricht einem abstrakten Typ, es wird kein Konstruktor zur Verfügung gestellt
• NOT FINAL
es besteht die Möglichkeit, Untertypen zu definieren
• Standard: INSTANTIABLE und FINAL
• Man beachte den Unterschied zu Java bei FINAL.
Beispiel:
CREATE TYPE t_adress AS OBJECT ( ... ) NOT INSTANTIABLE NOT FINAL;
CREATE TYPE t_USadress UNDER t_adress ( ... );
CREATE TYPE t_DEadress UNDER t_adress ( ... );
Objektrelationale Datenbanksysteme — Hochschule Bonn-Rhein-Sieg, SS 2010
176
4. Objektrelationales Typsystem
Objekttypen
Instanziierung von Objekttypen
• Wenn instantiable, dann steht ein Konstruktor mit passender Stelligkeit zur
Verfügung.
• Bei Nutzung geschachtelter Objekttypen sind natürlich auch die Konstruktoren zu
schachteln.
insert into kunden
values ( 4711, ’Paul Paulsen’,
t_anschrift(’Paulsplatz’, ’17a’, ’77777’, ’Paulsheim’) );
insert into boxes
values ( 4712, Box2D( Point2D(1,1), Point2D(2,3) ) );
Objektrelationale Datenbanksysteme — Hochschule Bonn-Rhein-Sieg, SS 2010
177
4. Objektrelationales Typsystem
Objekttypen
Nutzung in SQL und PL/SQL
• Auf die einzelnen Attribute eines Objekttyps wird mit der Punkt-Notation zugegriffen.
• Sowohl in SQL als auch in PL/SQL möglich.
select k_name, k_anschrift.ort
from kunden
where k_anschrift.plz like ’53%’
• Bei mehrfacher Verschachtelung setzt sich dies entsprechend fort.
select box.lowleft.x, box.lowleft.y,
box.upright.x, box.upright.y
from boxes
where box_id = 4712
Objektrelationale Datenbanksysteme — Hochschule Bonn-Rhein-Sieg, SS 2010
178
4. Objektrelationales Typsystem
Objekttypen
Vergleichsoperatoren
• Für ganze Objekte stehen die Vergleichsoperatoren = und <> zur Verfügung.
• Vergleich erfolgt komponentenweise, Wildcards sind nicht möglich
• Definition spezialisierter Vergleichs- und Ordnungsmethoden möglich (später
mehr)
select box_id
from boxes
where lowleft = Point2D(1,1)
Objektrelationale Datenbanksysteme — Hochschule Bonn-Rhein-Sieg, SS 2010
179
4. Objektrelationales Typsystem
Objekttypen
Indexdefinitionen
• Indexdefinitionen auf Attributen eines Objekttyps innerhalb einer Tabelle sind
möglich.
create index kunden_plz_index on kunden(k_anschrift.plz);
Objektrelationale Datenbanksysteme — Hochschule Bonn-Rhein-Sieg, SS 2010
180
4. Objektrelationales Typsystem
Objekttypen
Methoden-Deklaration (1)
• Neben Attributen können für einen Objekttyp Methoden definiert werden.
• Hierbei wird zwischen Methoden mit Rückgabe (MEMBER FUNCTION) und ohne Rückgabe eines Ergebnisses (MEMBER PROCEDURE) unterschieden.
• Bei der Typdefinition wird nur das Interface bzw. die Signatur für die Methoden
angegeben, keine Implementierung.
• Die Implementierung erfolgt in einer separaten Definition: CREATE TYPE BODY
Objektrelationale Datenbanksysteme — Hochschule Bonn-Rhein-Sieg, SS 2010
181
4. Objektrelationales Typsystem
Objekttypen
Methoden-Deklaration (2)
Allgemeiner Aufbau:
CREATE TYPE typname AS OBJECT (
attribut1 datentyp1 ,
...
attributN datentypN ,
MEMBER PROCEDURE methodenname(argument1, ...) ,
...
MEMBER FUNCTION methodenname(argument1, ...) RETURN datentyp ,
...
);
Hinweis: Bei parameterlosen Methoden werden bei Deklaration (und Definition) keine
Klammern verwendet, beim Aufruf sind aber Klammern notwendig.
Objektrelationale Datenbanksysteme — Hochschule Bonn-Rhein-Sieg, SS 2010
182
4. Objektrelationales Typsystem
Objekttypen
Beispiel:
CREATE TYPE Box2d AS OBJECT (
lowleft Point2d,
upright Point2d,
MEMBER FUNCTION flaeche RETURN number
);
Objektrelationale Datenbanksysteme — Hochschule Bonn-Rhein-Sieg, SS 2010
183
4. Objektrelationales Typsystem
Objekttypen
Methoden-Implementierung
• Die Implementierung erfolgt mit Hilfe einer CREATE TYPE BODY Anweisung.
• In der Anweisung wird die Signatur der Methoden wiederholt.
• Hinter AS oder IS schließt sich dann die Implementierung als PL/SQL-Block (BEGIN
... END;) an.
• Die CREATE TYPE BODY Anweisung wird insgesamt auch mit einem END abgeschlossen.
• Innerhalb der Implementierungblöcke haben wir mit Hilfe von SELF Zugriff auf das
Objekt, für das eine Methode aufgerufen wurde.
Objektrelationale Datenbanksysteme — Hochschule Bonn-Rhein-Sieg, SS 2010
184
4. Objektrelationales Typsystem
Objekttypen
CREATE TYPE BODY typname AS
MEMBER PROCEDURE methodenname(argument1, ...) AS
lokale Variablen
...
BEGIN
PL/SQL-Anweisungen
...
END;
MEMBER FUNCTION methodenname(argument1, ...) RETURN datentyp AS
lokale Variablen
...
BEGIN
PL/SQL-Anweisungen
...
RETURN Wert ;
END;
END;
☞ Beispiele
Objektrelationale Datenbanksysteme — Hochschule Bonn-Rhein-Sieg, SS 2010
185
4. Objektrelationales Typsystem
Objekttypen
Nutzung der Methoden
• Mit der üblichen Punkt-Notation innerhalb von SQL- und PL/SQL-Anweisungen.
select b.box_id, b.box_box.flaeche()
from boxes b
where b.box_box.flaeche() > 2
Objektrelationale Datenbanksysteme — Hochschule Bonn-Rhein-Sieg, SS 2010
186
4. Objektrelationales Typsystem
Objekttypen
Klassenmethoden
• Neben Instanzmethoden besteht auch die Möglichkeit Klassenmethoden zu deklarieren und definieren.
• Solche Methoden werden mit dem Schlüsselwort STATIC statt mit MEMBER versehen,
sowohl innerhalb von CREATE TYPE als auch von CREATE TYPE BODY.
• Klassenattribute werden nicht unterstützt.
STATIC FUNCTION funktionsname(argument1, ...) RETURN datentyp
STATIC PROCEDURE funktionsname(argument1, ...) RETURN datentyp
CREATE TYPE Point2d AS OBJECT (
...
STATIC FUNCTION ursprung RETURN Point2d
);
Objektrelationale Datenbanksysteme — Hochschule Bonn-Rhein-Sieg, SS 2010
187
4. Objektrelationales Typsystem
Objekttypen
CREATE TYPE BODY Point2d AS
...
STATIC FUNCTION ursprung RETURN Point2d IS
BEGIN
RETURN Point2d(0,0);
END;
END;
Objektrelationale Datenbanksysteme — Hochschule Bonn-Rhein-Sieg, SS 2010
188
4. Objektrelationales Typsystem
Objekttypen
Zusätzliche Konstruktoren
• Neben dem Standardkonstruktor können weitere Konstruktoren mit anderen Signaturen definiert werden.
• Konstruktormethoden werden mit dem Schlüsselwort CONSTRUCTOR FUNCTION eingeleitet.
• Es wird auch ein Methodenname verlangt, er muss mit dem Typnamen identisch
sein.
• Als Rückgabetyp muss SELF AS RESULT angegeben werden.
• In der Implementierung wird mittels SELF der passende Zustand hergestellt.
• Für RETURN wird kein Wert angegeben.
Objektrelationale Datenbanksysteme — Hochschule Bonn-Rhein-Sieg, SS 2010
189
4. Objektrelationales Typsystem
Objekttypen
Map-Funktion
• Eine Map-Funktion dient dazu, zusätzliche Vergleichsoperatoren zur Verfügung zu
stellen.
• Die Map-Funktion bildet ein Objekt auf einen Wert vom Typ Zahl, String oder Datum
ab.
• Für den Vergleich wird dann der Wert genutzt.
• Für t1, t2 ∈ T gilt t1 < t2 gdw. map(t1 ) < map(t2 ).
• Die Map-Funktion ist eine parameterlose MEMBER FUNCTION, die zusätzlich mit dem
Schlüsselwort MAP versehen wird.
MAP MEMBER FUNCTION funktionsname RETURN typ
☞ Beispiel
Objektrelationale Datenbanksysteme — Hochschule Bonn-Rhein-Sieg, SS 2010
190
4. Objektrelationales Typsystem
Objekttypen
Order-Funktion
• Alternativ zu einer Map-Funktion kann auch eine Order-Funktion definiert werden
(aber nicht beide).
• Die Order-Funktion ist flexibler: Für zwei Objekte wird ein Vergleich durchgeführt.
• Vergleich: SELF mit Parameter OBJ
• Ergebis: -1, falls SELF ≤ OBJ, sonst 1
☞ Beispiel
Objektrelationale Datenbanksysteme — Hochschule Bonn-Rhein-Sieg, SS 2010
191
Herunterladen