Foreign Key (SQL): Unterschied zwischen den Versionen

Aus Byte-Welt Wiki
Zur Navigation springenZur Suche springen
(Kategorie geändert)
K
 
(Eine dazwischenliegende Version von einem anderen Benutzer wird nicht angezeigt)
Zeile 1: Zeile 1:
 
Mit dem '''Foreign Key''' (deutsch ''Fremdschlüssel''), auch '''FK''' genannt, ist eine [[Contraint (SQL)|Constraint]] Eigenschaft einer [[Tabelle (SQL) | Tabelle]].
 
Mit dem '''Foreign Key''' (deutsch ''Fremdschlüssel''), auch '''FK''' genannt, ist eine [[Contraint (SQL)|Constraint]] Eigenschaft einer [[Tabelle (SQL) | Tabelle]].
  
Ein Fremdschlüssel dient der Referenzierung eines Eintrags in einer anderen Tabelle, daher wird er für [[Relationen (SQL)|Relationen]] verwendet. Hierbei wird sichergestellt, dass dieser Eintrag existieren. Daher dürfen Einträge für Fremdschlüssel auch nicht <code>null</code> sein. Im Gegensatz zu den [[Primary Key (SQL) | Primärschlüssel]] dürfen mehrere unabhängige Fremdschlüssel in einer Tabelle vorhanden sein.
+
Ein Fremdschlüssel dient der Referenzierung eines Eintrags in einer anderen Tabelle, daher wird er für [[Relationen (SQL)|Relationen]] verwendet. Hierbei wird sichergestellt, dass dieser Eintrag existieren. Einträge dürfen für den Fremdschlüssel aber <code>null</code> sein. Im Gegensatz zu den [[Primary Key (SQL) | 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 [[Datenbank]]en Einschränkungen, so sind unter [[PostgreSQL]] nur Spalten die als [[Primary Key (SQL) | Primärschlüssel]] oder [[ Unique (SQL) | Unique]] markiert sind möglich.
+
Nach dem ANSI SQL dürfen alle Spalten als Referenz eines Fremdschlüssels verwendet werden, jedoch muss die Spalte '''unique''' sein, was durch einen [[Primary Key (SQL) | Primary Key]] oder [[Unique Constraint (SQL) | Umique Constraint]] realsiert wird.
  
  
 
== Definition ==
 
== Definition ==
 
Fremdschlüsseldeklaration:
 
Fremdschlüsseldeklaration:
<code=SQL>
+
<syntaxhighlight lang="sql">
 
FOREIGN KEY (spalte [,spalte]) REFERENCES tabelle [(spalte [,spalte])]
 
FOREIGN KEY (spalte [,spalte]) REFERENCES tabelle [(spalte [,spalte])]
 
   [MATCH {FULL | PARTIAL}]
 
   [MATCH {FULL | PARTIAL}]
 
   [ON DELETE { NO ACTION |CASCADE | SET DEFAULT | SET NULL }]
 
   [ON DELETE { NO ACTION |CASCADE | SET DEFAULT | SET NULL }]
 
   [ON UPDATE { NO ACTION |CASCADE | SET DEFAULT | SET NULL }]
 
   [ON UPDATE { NO ACTION |CASCADE | SET DEFAULT | SET NULL }]
</code=SQL>
+
</syntaxhighlight>
 
oder auch  
 
oder auch  
<code=SQL>
+
<syntaxhighlight lang="sql">
 
CREATE table (
 
CREATE table (
 
   ...
 
   ...
Zeile 22: Zeile 22:
 
   [ON UPDATE { NO ACTION |CASCADE | SET DEFAULT | SET NULL }]
 
   [ON UPDATE { NO ACTION |CASCADE | SET DEFAULT | SET NULL }]
 
   ...);
 
   ...);
</code=SQL>
+
</syntaxhighlight>
  
 
#Die erste Spaltenangabe beschreibt die Spalte, die als Fremdschlüssel in der aktuellen [[Tabelle (SQL) | 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.
 
#Die erste Spaltenangabe beschreibt die Spalte, die als Fremdschlüssel in der aktuellen [[Tabelle (SQL) | 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.
Zeile 42: Zeile 42:
 
== Beispiel ==
 
== Beispiel ==
 
Definition einer Tabelle mit Fremdschlüssel
 
Definition einer Tabelle mit Fremdschlüssel
<code=SQL>
+
<syntaxhighlight lang="sql">
 
CREATE TABLE tab(
 
CREATE TABLE tab(
 
   id INTEGER PRIMARY KEY,
 
   id INTEGER PRIMARY KEY,
Zeile 48: Zeile 48:
 
   FOREIGN KEY fkspalte REFERENCES tabelle2 ( id);
 
   FOREIGN KEY fkspalte REFERENCES tabelle2 ( id);
 
);
 
);
</code=SQL>
+
</syntaxhighlight>
 +
 
 +
== Weiterführende Artikel ==
 +
* [[Primary Key (SQL) | Primary Key]]
 +
* [[Unique Constraint (SQL) | Unique Constraint]]
 +
* [[Constraint (SQL) | Contraint]]
  
 
[[Kategorie:SQL]]
 
[[Kategorie:SQL]]

Aktuelle Version vom 2. April 2018, 13:25 Uhr

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. Einträge dürfen für den Fremdschlüssel aber 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 muss die Spalte unique sein, was durch einen Primary Key oder Umique Constraint realsiert wird.


Definition

Fremdschlüsseldeklaration:

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 }]

oder auch

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 }]
  ...);
  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

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

Weiterführende Artikel