Databases Reference
In-Depth Information
9.3.3 Vererbung
Das UML-Diagramm am Anfang des Abschnitts 9.3 enthält eine Spezialisierungs-
beziehung zwischen Kunde und Kunde_mit_Bankeinzug. Der Subtyp enthält
zusätzliche Attribute. Da eine Bankverbindung immer dieselben Attribute hat,
können wir verfahren wie bei der Adresse und dafür einen eigenen Typen einfüh-
ren.
CREATE OR REPLACE TYPE otyp_girokonto AS OBJECT
(
konto_inhaber varchar2(30),
blz varchar2(8),
kontonr varchar2(10)
);
Der Typ für Kunden mit Bankeinzug wird nun als Subtyp erzeugt, indem man mit
der Klausel UNDER den Obertypen 19 referenziert und ansonsten nur die zusätzli-
chen Attribute (und gegebenenfalls Methoden) spezifiziert.
CREATE OR REPLACE TYPE otyp_kunde_mit_bankeinzug UNDER otyp_kunde
(
bankverbindung otyp_girokonto
);
Um einen Extent zu erzeugen, der Kunden und Kunden mit Bankverbindung als
Objekte speichern kann, lässt sich nun ausnutzen, dass Objekte einer Unterklasse
immer zugleich Objekte der Oberklasse sind. Das bedeutet, dass es nicht notwen-
dig ist, eine eigene Extent-Tabelle für Kunden mit Bankverbindung anzulegen. 20
Der Extent für Kunden wird angelegt, wobei wir mit der Klausel SUBSTITUTABLE AT
ALL LEVELS verlangen, dass immer dann ein Subtyp von otyp_kunde verwendet
werden darf, wo ein Kunde gefragt ist.
CREATE TABLE otab_kunde OF otyp_kunde
SUBSTITUTABLE AT ALL LEVELS
(
CONSTRAINT pk_kunde PRIMARY KEY (kunden_nr),
status NOT NULL,
CONSTRAINT chk_s tatus
18 Dieses Beispiel ist mit in den Skriptdateien cryartikel.sql und insartikel.sql auf der CD enthal-
ten. Beide befinden sich im Unterverzeichnis \...\OracleOO.
19 Wir haben hier den Obertypen otyp_kunde angegeben. Dieser hat gegenüber dem Beispiel
otyp_kunde0, das wir im vorigen Abschnitt besprochen haben, ein skalares Attribut als Kun-
dennummer. Bei der Anlage der Objekttabelle otab_kunde kann man dann deklarativ einen
Primärschlüssel erzeugen: CREATE OR REPLACE TYPE otyp_kunde AS OBJECT
(kunden_nr number (4,0),
...) Auf der CD befindet sich dieses Beispiel im Skript crykunde.sql.
20 Es wäre zwar möglich, dies zu tun, dann würde der Extent von otyp_kunde aber nicht die
Objekte von otyp_kunde_mit_Bankverbindung enthalten, im Widerspruch zum Prinzip, dass
Objekte der Unterklasse Objekte der Oberklasse sind.
 
Search WWH ::




Custom Search