SQL Server-Fremdschlüssel: Erstellung anhand eines Beispiels
⚡ Intelligente Zusammenfassung
Ein Fremdschlüssel in SQL Server gewährleistet die referenzielle Integrität, indem er eine Kindtabelle mit einer Elterntabelle verknüpft. Jeder Fremdschlüsselwert muss bereits im referenzierten Primärschlüssel der Elterntabelle vorhanden sein.

Was ist ein Fremdschlüssel?
Ein Fremdschlüssel bietet eine Möglichkeit, die referenzielle Integrität innerhalb von SQL ServerVereinfacht ausgedrückt stellt ein Fremdschlüssel sicher, dass Werte aus einer Tabelle auch in einer anderen Tabelle vorhanden sein müssen.
Regeln für FOREIGN KEY
- NULL ist in einem SQL-Fremdschlüssel zulässig.
- Die Tabelle, auf die verwiesen wird, heißt übergeordnete Tabelle.
- Die Tabelle mit dem Fremdschlüssel wird als Kindtabelle bezeichnet.
- Der Fremdschlüssel in der Kindtabelle verweist auf die Primärschlüssel in der übergeordneten Tabelle.
- Diese Eltern-Kind-Beziehung gewährleistet die Einhaltung der Regel der „referenziellen Integrität“.
Das folgende Diagramm fasst alle oben genannten Punkte zum Thema Fremdschlüssel zusammen.
So erstellen Sie einen Fremdschlüssel in SQL
In SQL Server gibt es zwei Möglichkeiten, einen Fremdschlüssel zu erstellen:
SQL Server Management Studio
Übergeordnete Tabelle: Angenommen, wir haben eine bestehende übergeordnete Tabelle namens 'Course'. Course_ID und Course_name sind zwei Spalten, wobei Course_Id der Primärschlüssel ist.
Kindtabelle: Die zweite Tabelle muss als Kindtabelle erstellt werden. Ihre beiden Spalten sind „Course_ID“ und „Course_Strength“. „Course_ID“ soll der Fremdschlüssel sein.
Schritt 1) Klicken Sie mit der rechten Maustaste auf Tabellen > Neu > Tabelle…
Schritt 2) Geben Sie zwei Spaltennamen wie „Course_ID“ und „Course_Strength“ ein. Klicken Sie mit der rechten Maustaste auf die Spalte „Course_Id“ und klicken Sie dann auf „Beziehung“.
Schritt 3) Klicken Sie unter „Fremdschlüsselbeziehungen“ auf „Hinzufügen“.
Schritt 4) Klicken Sie in der „Tabellen- und Spaltenspezifikation“ auf das Symbol „…“.
Schritt 5) Wählen Sie in der Dropdown-Liste die 'Primärschlüsseltabelle' als 'COURSE' und die neu zu erstellende Tabelle als 'Fremdschlüsseltabelle' aus.
Schritt 6) Wählen Sie für die 'Primärschlüsseltabelle' die Spalte 'Course_Id' als Primärschlüsselspalte aus.
Wählen Sie für die „Fremdschlüsseltabelle“ die Spalte „Course_Id“ als Fremdschlüsselspalte aus. Klicken Sie auf OK.
Schritt 7) Klicken Sie auf Hinzufügen.
Schritt 8) Geben Sie als Tabellennamen „Course_Strength“ ein und klicken Sie auf OK.
Ergebnis: Wir haben eine Eltern-Kind-Beziehung zwischen „Kurs“ und „Kursstärke“ hergestellt.
T-SQL: Erstellen einer Eltern-Kind-Tabelle mit T-SQL
Übergeordnete Tabelle: Wir gehen davon aus, dass wir eine bestehende übergeordnete Tabelle mit dem Namen 'Kurs' haben. Kurs_ID und Kurs_Name sind zwei Spalten, wobei Kurs_ID der Primärschlüssel ist.
Kindtabelle: Wir müssen eine zweite Tabelle als Kindtabelle mit dem Namen „Course_Strength_TSQL“ erstellen. Ihre beiden Spalten sind „Course_ID“ und „Course_Strength“. Die Spalte „Course_ID“ soll der Fremdschlüssel sein.
Nachfolgend finden Sie die Syntax für eine Tabelle erstellen mit einem Fremdschlüssel.
Syntax:
CREATE TABLE childTable ( column_1 datatype [ NULL |NOT NULL ], column_2 datatype [ NULL |NOT NULL ], ... CONSTRAINT fkey_name FOREIGN KEY (child_column1, child_column2, ... child_column_n) REFERENCES parentTable (parent_column1, parent_column2, ... parent_column_n) [ ON DELETE { NO ACTION |CASCADE |SET NULL |SET DEFAULT } ] [ ON UPDATE { NO ACTION |CASCADE |SET NULL |SET DEFAULT } ] );
Hier ist eine Beschreibung der oben genannten Parameter:
- childTable ist der Name der Tabelle, die erstellt werden soll.
- column_1 und column_2 sind die Spalten, die der Tabelle hinzugefügt werden sollen.
- fkey_name ist der Name der zu erstellenden Fremdschlüsselbeschränkung.
- child_column1, child_column2 … child_column_n sind die Spalten der Kindtabelle, die auf den Primärschlüssel in der Elterntabelle verweisen.
- parentTable ist der Name der übergeordneten Tabelle, deren Schlüssel in der untergeordneten Tabelle referenziert wird.
- parent_column1, parent_column2 … parent_column_n sind die Spalten, die den Primärschlüssel der übergeordneten Tabelle bilden.
- ON DELETE ist ein optionaler Parameter, der festlegt, was mit den untergeordneten Daten nach dem Löschen der übergeordneten Daten geschieht. Mögliche Werte sind NO ACTION, SET NULL, CASCADE oder SET DEFAULT.
- ON UPDATE ist ein optionaler Parameter, der festlegt, was mit den untergeordneten Daten nach der Aktualisierung der übergeordneten Daten geschieht. Mögliche Werte sind NO ACTION, SET NULL, CASCADE oder SET DEFAULT.
- KEINE AKTION bedeutet, dass mit den untergeordneten Daten nichts geschieht, nachdem die übergeordneten Daten aktualisiert oder gelöscht wurden.
- CASCADE bedeutet, dass die Kinddaten erst gelöscht oder aktualisiert werden, nachdem die Elterndaten gelöscht oder aktualisiert wurden.
- SET NULL bedeutet, dass die Kinddaten auf null gesetzt werden, nachdem die Elterndaten aktualisiert oder gelöscht wurden.
- SET DEFAULT bedeutet, dass die untergeordneten Daten nach einer Aktualisierung oder Löschung der übergeordneten Daten auf ihren Standardwert zurückgesetzt werden.
Betrachten wir ein Beispiel für einen Fremdschlüssel, der eine Tabelle mit einer Spalte als Fremdschlüssel erstellt, mithilfe eines Datentyp für jede Spalte.
Beispiel für einen Fremdschlüssel in SQL
Abfrage:
CREATE TABLE Course_Strength_TSQL ( Course_ID Int, Course_Strength Varchar(20) CONSTRAINT FK FOREIGN KEY (Course_ID) REFERENCES COURSE (Course_ID) )
Schritt 1) Führen Sie die Abfrage durch, indem Sie auf Ausführen klicken.
Ergebnis: Wir haben eine Eltern-Kind-Beziehung zwischen 'Course' und 'Course_Strength_TSQL' hergestellt.
Verwenden von ALTER TABLE
Nun lernen wir, wie man in SQL Server mithilfe der ALTER TABLE-Anweisung einen Fremdschlüssel zu einer bereits existierenden Tabelle hinzufügt. Wir verwenden dazu die unten angegebene Syntax:
ALTER TABLE childTable ADD CONSTRAINT fkey_name FOREIGN KEY (child_column1, child_column2, ... child_column_n) REFERENCES parentTable (parent_column1, parent_column2, ... parent_column_n);
Hier ist eine Beschreibung der oben verwendeten Parameter:
- childTable ist der Name der Tabelle, die erstellt werden soll.
- column_1 und column_2 sind die Spalten, die der Tabelle hinzugefügt werden sollen.
- fkey_name ist der Name der zu erstellenden Fremdschlüsselbeschränkung.
- child_column1, child_column2 … child_column_n sind die Spalten der Kindtabelle, die auf den Primärschlüssel in der Elterntabelle verweisen.
- parentTable ist der Name der übergeordneten Tabelle, deren Schlüssel in der untergeordneten Tabelle referenziert wird.
- parent_column1, parent_column2 … parent_column_n sind die Spalten, die den Primärschlüssel der übergeordneten Tabelle bilden.
ALTER TABLE Beispiel zum Hinzufügen eines Fremdschlüssels:
ALTER TABLE department ADD CONSTRAINT fkey_student_admission FOREIGN KEY (admission) REFERENCES students (admission);
Wir haben einen Fremdschlüssel namens fkey_student_admission für die Abteilungstabelle erstellt. Dieser Fremdschlüssel verweist auf die Zulassungsspalte der Studententabelle.
Beispielabfrage FOREIGN KEY
Schauen wir uns zunächst die Daten unserer übergeordneten Tabelle an, COURSE.
Abfrage:
SELECT * from COURSE;
Nun fügen wir einige Zeilen in die untergeordnete Tabelle 'Course_Strength_TSQL' ein. Wir werden versuchen, zwei Arten von Zeilen einzufügen:
- Der erste Typ, bei dem Course_Id in der Kindtabelle in Course_Id der Elterntabelle vorhanden ist, d.h. Course_Id = 1 und 2.
- Der zweite Typ ist derjenige, bei dem die Course_Id in der Kindtabelle nicht in der Course_Id der Elterntabelle existiert, d. h. Course_Id = 5.
Abfrage:
Insert into COURSE_STRENGTH values (1,'SQL'); Insert into COURSE_STRENGTH values (2,'Python'); Insert into COURSE_STRENGTH values (5,'PERL');
Ergebnis: Lassen Sie uns die Abfrage gemeinsam ausführen, um unsere übergeordneten und untergeordneten Tabellen anzuzeigen.
Die Zeilen mit den Kurs-IDs 1 und 2 existieren in der Tabelle „Kursstärke“. Kurs-ID 5 stellt jedoch eine Ausnahme dar, da es keine entsprechende Zeile in der übergeordneten Tabelle gibt.

















