<< >> Up Title Contents Index

Zusammenhänge zwischen Tabellen

Zwischen zwei Tabellen läßt sich eine Abhängigkeit definieren, die Auswirkungen auf die Veränderung von Zeilen hat.

Tabelle   kunde

Dieser Zusammenhang wird als referentielle Integritätsbedingung bezeichnet und bei der Definition der Tabelle 'buchung' festgelegt. Es wird eine Abhängigkeit der Tabelle 'buchung' von 'kunde' definiert, indem 'buchung' einen sogenannten Fremdschlüssel zugewiesen bekommt, der dem Schlüssel von 'kunde' entspricht.

CREATE TABLE buchung
       (bnr      FIXED (4) KEY,
        knr      FIXED (4),
        hnr      FIXED (4),
        raumtyp  CHAR  (6),
        ankunft  DATE,
        abreise  DATE,
        FOREIGN  KEY (knr)
        REFERENCES kunde
        ON DELETE CASCADE)

Der Name der referentiellen Integritätsbedingung kann entweder vom Benutzer nach den Schlüsselworten FOREIGN KEY angegeben werden, oder er wird von der Datenbank selbst vergeben. Die Namen der beteiligten Tabellen werden dann - durch einen Unterstrich getrennt konkateniert (bis zu einer maximalen Länge von 18 Zeichen).

Die im obigen Beispiel definierte Beziehung bekommt den Namen 'kunde_buchung'.

Über ein hinter DELETE anzugebendes Schlüsselwort kann festgelegt werden, was mit abhängigen Werten bei Löschung von Zeilen geschieht.

Wenn Zeilen der Kundentabelle gelöscht werden, muß sichergestellt sein, daß keine Buchungen mehr dafür vorhanden sind. Ist das doch der Fall, kann der Benutzer unter verschiedenen Möglichkeiten wählen:

Er gibt in der Anweisung

      ON DELETE RESTRICT

an. Er erhält dann eine Warnung und kann entsprechend reagieren.

Er verlangt, daß zugehörige Buchungszeilen ebenfalls automatisch gelöscht werden:

       ON DELETE CASCADE

Er kann aber auch erreichen, daß in den betroffenen Buchungszeilen die nun sinnlos gewordene Kundennummer auf den NULL-Wert oder einen Standardwert gesetzt wird:

       ON DELETE SET NULL
       ON DELETE SET DEFAULT

Der oben definierte Zusammenhang wird auch in der umgekehrten Richtung überwacht. Das Einfügen einer neuen Buchung oder das entsprechende Ändern einer bestehenden Buchung, zu der kein Kunde vorhanden ist, wird unabhängig von der DELETE-Regel verhindert.

Mit einem speziellen ALTER-TABLE-Kommando kann eine referentielle Integritätsbedingung wieder gelöscht werden.

Die Abhängigkeit der Tabellen 'buchung' und 'kunde' ist nicht mehr erwünscht und soll wieder aufgehoben werden:

ALTER TABLE buchung DROP FOREIGN KEY kunde_buchung


<< >> Up Title Contents Index