SQL
Fremde Schlüssel
Suche…
Erstellen einer Tabelle mit einem Fremdschlüssel
In diesem Beispiel haben wir eine vorhandene Tabelle, SuperHeros
.
Diese Tabelle enthält eine Primärschlüssel- ID
.
Wir werden eine neue Tabelle hinzufügen, um die Kräfte jedes Superhelden zu speichern:
CREATE TABLE HeroPowers
(
ID int NOT NULL PRIMARY KEY,
Name nvarchar(MAX) NOT NULL,
HeroId int REFERENCES SuperHeros(ID)
)
Die Spalte HeroId
ist ein Fremdschlüssel für die Tabelle SuperHeros
.
Fremdschlüssel erklärt
Fremdschlüsseleinschränkungen stellen die Datenintegrität sicher, indem erzwingt, dass Werte in einer Tabelle mit Werten in einer anderen Tabelle übereinstimmen müssen.
Ein Beispiel, wo ein Fremdschlüssel benötigt wird, ist: In einer Universität muss ein Kurs zu einer Abteilung gehören. Code für dieses Szenario lautet:
CREATE TABLE Department (
Dept_Code CHAR (5) PRIMARY KEY,
Dept_Name VARCHAR (20) UNIQUE
);
Fügen Sie Werte mit der folgenden Anweisung ein:
INSERT INTO Department VALUES ('CS205', 'Computer Science');
Die folgende Tabelle enthält die Informationen zu den Fächern der Informatikbranche:
CREATE TABLE Programming_Courses (
Dept_Code CHAR(5),
Prg_Code CHAR(9) PRIMARY KEY,
Prg_Name VARCHAR (50) UNIQUE,
FOREIGN KEY (Dept_Code) References Department(Dept_Code)
);
(Der Datentyp des Fremdschlüssels muss mit dem Datentyp des referenzierten Schlüssels übereinstimmen.)
Die Dept_Code
für die Spalte Dept_Code
lässt Werte nur dann zu, wenn sie bereits in der referenzierten Tabelle, Department
. Das bedeutet, wenn Sie versuchen, die folgenden Werte einzufügen:
INSERT INTO Programming_Courses Values ('CS300', 'FDB-DB001', 'Database Systems');
Die Datenbank wird einen Fehler durch einen CS300
, da CS300
nicht in der Department
. Wenn Sie jedoch einen Schlüsselwert versuchen, der vorhanden ist:
INSERT INTO Programming_Courses VALUES ('CS205', 'FDB-DB001', 'Database Systems');
INSERT INTO Programming_Courses VALUES ('CS205', 'DB2-DB002', 'Database Systems II');
dann erlaubt die Datenbank diese Werte.
Ein paar Tipps zur Verwendung von Fremdschlüsseln
- Ein Fremdschlüssel muss auf einen UNIQUE-Schlüssel (oder einen Primärschlüssel) in der übergeordneten Tabelle verweisen.
- Die Eingabe eines NULL-Werts in eine Fremdschlüsselspalte verursacht keinen Fehler.
- Fremdschlüsseleinschränkungen können auf Tabellen in derselben Datenbank verweisen.
- Fremdschlüsseleinschränkungen können auf eine andere Spalte in derselben Tabelle verweisen (Selbstreferenz).