>> Inhaltsverzeichnis >> Artikel

Element Foreign

  ELEMENT foreign (key+)
  ATTRIBUTE
       name            string
       table           string
       match           string
       ondelete        string
       onupdate        string
       deferrable      bool
  
Attribute
Attribut Typ Pflicht Default Beschreibung
name string - n/a Ein eindeutiger Name welcher diesen Foreign-Key-Constraint identifiziert. Sollte kleingeschrieben und ein valider XML-, SQL-Bezeichner sein.
table string yes n/a Name der Zieltabelle.
match string - simple full | partial | simple
ondelete string - no-action no-action | restrict | cascade | set-null | set-default
onupdate string - no-action no-action | restrict | cascade | set-null | set-default
deferrable bool - no Deferrable bedeutet, dass der DBS bis zum Ende der Transaktion warten sollte, bevor hinzugefügte oder aktualisierte Fremdschlüssel geprüft werden.
Das wird in Situationen verwendet, in denen Daten innerhalb einer Transaktion sowohl in die Eltern- als auch in die Kindtabelle eingefügt werden, oder wenn kreisförmige Referenzen erzeugt werden (sofern das DBMS dies unterstützt).
Beschreibung

Fremdschlüssel dienen dazu, referentielle Integrität zwischen Tabellen zu gewährleisten. Dieses Feature wird nicht von allen DBMS unterstützt. Die Implementierung kann dieses Feature emulieren.

Jeder Fremdschlüssel besteht aus mindestens einer Quelle und einem Ziel. Beachten Sie, dass die Datentypen der Quellspalten eines Fremdschlüssels von den Datentypen der Zielspalten abhängen. Spalten, welche einen Fremdschlüssel enthalten, sollten als Typ "reference" definiert werden. In diesem Fall muss die Implementierung den korrekten Datentyp automatisch festlegen.

Die Attribute "ondelete" und "onupdate" definieren, wie das DBMS auf eine Änderung der Referenz reagieren soll.

no-action
Die Referenz in der Kindtabelle darf nicht auf einen Wert gesetzt werden, den keine Zeile in der Elterntabelle entspricht.
restrict
Der Wert eines Schlüssels in der Elterntabelle darf nicht verändert werden, falls noch eine Referenz auf diesen Wert existiert.
cascade
Wenn der Schlüssel in der Elterntabelle gelöscht oder aktualisiert wird, werden alle darauf verweisenden Spalten in der Kindtabelle auch aktualisiert oder gelöscht.
set-null
Wenn der Schlüssel in der Elterntabelle sich ändert, wird der Wert der Referenz auf NULL gesetzt.
set-default
Wenn der Schlüssel in der Elterntabelle sich ändert, wird der Wert der Referenz auf den Default-Wert zurückgesetzt.

Das Attribut "match" definiert, wann das DBMS die referentielle Integrität als erfüllt betrachten soll. Dies betrifft nur zusammengesetzte Fremdschlüssel, welche mehrere Spalten verwenden.

full
Alle Spalten müssen die Bedingung erfüllen.
partial
Mindestens eine Spalte muss die Bedingung erfüllen.
simple
Alle Spalten, die einen Wert haben, müssen die Bedingung erfüllen (manche Spalten können null sein).
Implementierung

Das Attribut "deferrable" wird von einigen DBMS nicht unterstützt. Beachten Sie, dass diese Eigenschaft nicht simuliert werden kann. Verschiedene DBMS haben verschiedene Herangehensweisen, um dieses Problem zu umgehen. Z.Bsp. das vorübergehende Deaktivieren von Constraints. Nähere Informationen finden Sie in Ihrem Handbuch.

Das Attribut "match" wird durch einige DBMS nicht unterstützt. Dies betrifft nur zusammengesetzte Fremdschlüssel, welche mehrere Spalten verwenden. Dieses Feature wird selten verwendet und sollte für Datenbankanwendungen aus Gründen der Kompatibilität vermieden werden.

Einige Werte der Attribute "onupdate" und "ondelete" werden durch einige DBMS nicht unterstützt. Diese können simuliert werden durch die Verwendung von Trigger.

Autor: Thomas Meyer, www.yanaframework.net