Foreign Key (SQL)

Aus Byte-Welt Wiki
Version vom 20. März 2007, 11:29 Uhr von 217.88.61.106 (Diskussion) (bisschen was dazugepackt)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springenZur Suche springen

Mit dem Foreign Key (deutsch Fremdschlüssel), auch FK genannt, ist eine Constraint Eigenschaft einer Tabelle.

Ein Fremdschlüssel dient der Referenzierung eines Eintrags in einer anderen Tabelle, daher wird er für Relationen verwendet. Hierbei wird sichergestellt, dass dieser Eintrag existieren. Daher dürfen Einträge für Fremdschlüssel auch nicht null sein. Im Gegensatz zu den Primärschlüssel dürfen mehrere unabhängige Fremdschlüssel in einer Tabelle vorhanden sein. Nach dem ANSI SQL dürfen alle Spalten als Referenz eines Fremdschlüssels verwendet werden, jedoch machen hier die meisten Datenbanken Einschränkungen, so sind unter PostgreSQL nur Spalten die als Primärschlüssel oder Unique markiert sind möglich.


Definition

Fremdschlüsseldeklaration: <code=SQL> FOREIGN KEY (spalte [,spalte]) REFERENCES tabelle [(spalte [,spalte])]

 [MATCH {FULL | PARTIAL}]
 [ON DELETE { NO ACTION |CASCADE | SET DEFAULT | SET NULL }]
 [ON UPDATE { NO ACTION |CASCADE | SET DEFAULT | SET NULL }]

</code=SQL> oder auch <code=SQL> CREATE table (

 ...
 .. spalte  REFERENCES tabelle [(spalte)]
 [MATCH {FULL | PARTIAL}]
 [ON DELETE { NO ACTION |CASCADE | SET DEFAULT | SET NULL }]
 [ON UPDATE { NO ACTION |CASCADE | SET DEFAULT | SET NULL }]
 ...);

</code=SQL>

  1. Die erste Spaltenangabe beschreibt die Spalte, die als Fremdschlüssel in der aktuellen Tabelle verwendet werden soll. In der 1.Definition sind auch mehrere Spalten möglich wogegen in der 2. nur eine Spalte für den Fremdschlüssel verwendet werden kann.
  2. Die Angabe des Tabellennamens bezeichnet die Tabelle, auf die Referenziert wird.
  3. Die zweite Spaltenangabe bezeichnet die Spalte, auf die in der Zieltabelle verwiesen wird. Diese Angabe ist optional, wenn sie nicht angegeben wird, werden die selben Spaltennamen verwendet.
  4. Die MATCH Anweisung gibt an ob ein Eintrag eines Mehrspaltigen Fremdschlüssels einzelne null Elemente enthalten darf.
  5. Die ON DELETE Anweiswung gibt an was geschehen soll wenn die Daten der Tabelle gelöscht werden, auf die der Fremdschlüssel verweist.
    1. NO ACTION - Erzeugt eine Fehlermeldung, die anzeigt das hier die Konsistenz verletzt wird, dies ist der standard Wert.
    2. CASCADE - Löschen aller Einträge die auf diesen Eintrag verweisen.
    3. SET NULL - Setzen der Einträge auf NULL die auf diesen Eintrag verweisen, wenn der Eintrag gelöscht wird.
    4. SET DFAULT - Setzen des Eintrags auf den default Wert, wenn der Eintrag gelöscht wird.
  6. Die ON UPDATE Anweiswung gibt an was geschehen soll wenn die Daten der Tabelle verändert werden, auf die der Fremdschlüssel verweist.
    1. NO ACTION - Erzeugt eine Fehlermeldung, die anzeigt das hier die Konsistenz verletzt wird, dies ist der standard Wert.
    2. CASCADE - Ändern aller Einträge die auf diesen Eintrag verweisen.
    3. SET NULL - Setzen der Einträge auf NULL die auf diesen Eintrag verweisen, wenn der Eintrag geändert wird.
    4. SET DFAULT - Setzen des Eintrags auf den default Wert, wenn der Eintrag geändert wird.


Beispiel

Definition einer Tabelle mit Fremdschlüssel <code=SQL> CREATE TABLE tab(

 id INTEGER PRIMARY KEY,
 fkspalte INTEGER,
 FOREIGN KEY fkspalte REFERENCES tabelle2 ( id);

); </code=SQL>