Databases Reference
In-Depth Information
Hier werden, wie man sieht, die altbekannten Integritätsbedingungen (vgl.
Kapitel 4) formuliert. 14 Nicht auf der Ebene der Typ-Definition werden diese fest-
gelegt, sondern auf der Ebene der Definition von Extents. 15 Das führt zu einem
Konflikt. Legen wir bei der Kundennummer Wert darauf, dass sie die Fähigkeit
hat, selbst fortlaufende Nummern zu erzeugen und nicht mit Artikelnummern
vergleichbar zu sein oder legen wir Wert darauf, dass die Primärschlüsseleigen-
schaft festgehalten wird? Letztere brauchen wir zwar in Objektorientierten Daten-
banken nicht wegen der Entitätsintegrität - die OID ist ein besserer Ersatz für den
Primärschlüssel. Als Anwender wollen wir aber vielleicht doch nicht die identifi-
zierende Funktion der Kundennummer missen. Beides zugleich geht jedenfalls
nicht so ohne weiteres. Die PRIMARY KEY-Klausel ist zwar für Objekttabellen
erlaubt, aber nicht für Attribute, deren Basis ein ADT ist! 16 Dies ist ein Beispiel für
die derzeit mangelnde Orthogonalität dieser objektrelationalen SQL-Implementie-
rung. Wenn wir auf die Deklaration eines Schlüssels nicht verzichten wollen, müs-
sen wir wohl oder übel als Wertebereich für Kunden_nr den Standarddatentyp NUM-
BER(4,0) einsetzen, und können dann die Anweisung CREATE TABLE otab_kunde
um die Klausel
CONSTRAINT pk_kunde PRIMARY KEY (kunden_nr),
ergänzen. 17
Die Verwendung von ADTs als Wertebereich für Attribute erfordert, wie wir
bereits oben (Seite 327) gezeigt haben, Sorgfalt im Hinblick auf die Verarbeitung
ihrer Werte. Wir können beim Einfügen eines Kundentupels in die neue Tabelle
nicht einfach drei Strings als Adresse übergeben, sondern müssen als Attributwert
jeweils ein Objekt vom Typ otyp_kunden_key und otyp_adresse konstruieren und
diese komplett verarbeiten. Gleiches gilt für die Telefonliste .
INSERT INTO otab_kunde0 (kunden_nr, name, telefonliste, adresse,
letzte_bestellung, letzte_werbeaktion,
status, zahlungsart)
VALUES (otyp_kunden_key.neuer_kunden_key(), 'Voss, Hans',
varr_telefonliste('0421-3499483','0170-3421808'),
otyp_adresse('Kuhdamm 12','23863', 'Nienwohld'),NULL,
TO_DATE('01-12-1999','DD-MM-YYYY'),'S','N')
14 Es werden aber keine Einschränkungen außer NOT NULL für Spalten, deren Typ ein Objekt,
eine eingebettete Tabelle, VARRAY, REF oder LOB ist, akzeptiert [ORA01a, S 11-73].
15 Wir halten es für einen Mangel des objektorientierten Datenmodells, dass Integritätsbedingun-
gen nicht deklarativ auf Typebene formulierbar sind. Es müssen dafür jeweils Methoden defi-
niert werden, die beim Einfügen oder Ändern einer Objektinstanz die Einhaltung von Bedin-
gungen überprüfen. Eine recht umständliche Angelegenheit! Darüber hinaus ist das
Redefinieren eines Typ-Konstruktors vielfach im objektrelationalen Modell nicht möglich.
16 Vgl. [Ora01a, S. 11-81].
17 In den Beispielen auf der CD verwendet das Skript crykunde.sql die Variante mit »normalem«
Datentyp und PRIMARY KEY-Klausel.
 
Search WWH ::




Custom Search