Ein Fremdschlüssel ist eine Spalte (oder eine Kombination aus mehreren Spalten), derer Werte mit einem Primärschlüssel in einer anderen Tabelle übereinstimmen.

Mit dem Fremdschlüssel können Verbindung zwischen Tabellen eindeutig zugeordnet werden. Abgekürzt wird der Fremdschlüssel meist mit FK für „Foreign Key“.

Primärschlüssel für sich alleine bestehen, während ein Fremdschlüssel immer auf einen Primärschlüssel verweisen muss. In den Feldern der Fremdschlüssel-Spalten müssen Werte enthalten sein, die genauso in der Primärschlüssel-Spalte bestehen. Im Unterschied zum Primärschlüssel kann der Fremdschlüssel auch NULL-Werte zulassen. Daher muss es nicht zwangsweise einen Verweis auf eine weitere Tabelle geben. 

Wofür brauchen wir Fremdschlüssel?

Fremdschlüssel werden häufig verwendet, um Datenredundanz zu vermeiden. Das bedeutet in unserem Beispiel, dass die Bestellungen-Tabelle nicht dieselben Informationen wie aus der Kunden-Tabelle enthält, da das bei großen Unternehmen riesige Mengen an Daten verursachen würde. Stattdessen wählt man eine simple ID und ermöglich eine direkte Zuordnung.

In der Praxis werden häufig Primär- und Fremdschlüssel in JOINs verwendet, um zwei Tabellen in einer darzustellen. In einem JOIN müssen zwei Spalten abgeglichen werden – in unserem Fall die Primär- und Fremdschlüssel. Der Befehl fügt die Spalten aus beiden Tabellen zusammen, in denen die Primärschlüssel-Spalte aus Tabelle 1 mit der Sekundärschlüssel-Spalte aus Tabelle 2 übereinstimmt.

Fremdschlüssel - Beispiel

In der Datenbank eines Unternehmens existieren die Tabellen Kunden und Bestellungen. Die Kunden-Tabelle enthält alle Kundendaten und die Bestellungen-Tabelle Informationen zu den Kundenaufträgen. Jeder Auftrag muss mit einem Kunden verknüpft sein. In beiden Tabellen müssen Spalten existieren, die eine genaue Zuordnung zwischen Kunden und Auftrag ermöglichen. Den Namen des Kunden zu verwenden wäre ungünstig, da es vorkommen kann, dass zwei unterschiedliche Kunden denselben Namen besitzen. Daher verweist man in der Regel auf Kunden-IDs. In der Kunden-Tabelle ist die Kunden-ID der Primärschlüssel. In der Bestellungen-Tabelle kommt als Fremdschlüssel die Spalte Kunden-ID dazu, um dem Kunden seinen Auftrag eindeutig zuzuordnen.

--MySQL / PostgreSQL
CREATE TABLE Bestellungen(
	Bestell_ID INTEGER,
	Bestelldatum DATE,
	Kunden_ID INTEGER,
	PRIMARY KEY (Bestell_ID),
	FOREIGN KEY (Kunden_ID) REFERENCES Kunden(Kunden_ID)
);

--Oracle / SQL Server
CREATE TABLE Bestellungen(
	Bestell_ID INTEGER PRIMARY KEY,
	Bestelldatum DATE,
	Kunden_ID INTEGER REFERENCES Kunden(Kunden_ID)
); 

Die Tabelle Bestellungen wird erstellt. Sie besteht aus folgenden Spalten: Der Primärschlüssel Bestell_ID, welcher ein Integer (ganze Zahl) ist. Das Bestelldatum, welches in einem Datumsformat ausgegeben wird. Die Kunden_ID, welche ein Integer ist und über REFERENCES als Fremdschlüssel zugeordnet wird. Dafür wird auf die Tabelle „Kunden“ und darin die Spalte „Kunden_ID“ verwiesen.

Zusammengesetzte Fremdschlüssel

Manchmal besteht ein Fremdschlüssel aus mehreren Spalten. In diesem Fall spricht man von einem zusammengesetztem Fremdschlüssel. Die Fremdschlüssel-Spalten müssen dabei auf eine einzige Tabelle verweisen. Es ist nicht möglich, einen Fremdschlüssel zu haben, der auf eine Spalte in Tabelle 1 und eine Spalte in Tabelle 2 verweist.

Beispiel: Unser Unternehmen erhält die Produkttabellen unserer Lieferanten. Alle Produkt_IDs sind von 1 aufwärts durchnummeriert. Da aber verschiedene Lieferanten identische Produkt_IDs verwenden, kombinieren wir die Produkt_ID mit der Lieferanten_ID und bilden damit einen Primärschlüssel. In der Bestellungen-Tabelle unseres Unternehmens benötigen wir nun zwei Fremdschlüssel-Spalten: Produkt_ID und Lieferant_ID. Damit können wir bei jeder Bestellung das Produkt eindeutig zuordnen und es kommt zu keinen Verwechslungen. Die Produkt_ID 721 von unserem Lieferanten A ist ein Bleistift und die vom Lieferanten B eine Rolex-Uhr. Es könnte eventuell zu Verlusten kommen, wenn die Rolex-Uhr für 10 Cent verkauft wird. Aber glücklicherweise können wir zusammengesetzte Fremdschlüssel bilden.

Zusammengesetzte Fremdschlüssel - Beispiel

Unser Unternehmen erhält die Produkttabellen unserer Lieferanten. Alle Produkt_IDs sind von 1 aufwärts durchnummeriert. Da aber verschiedene Lieferanten identische Produkt_IDs verwenden, kombinieren wir die Produkt_ID mit der Lieferanten_ID und bilden damit einen Primärschlüssel. In der Bestellungen-Tabelle unseres Unternehmens benötigen wir nun zwei Fremdschlüssel-Spalten: Produkt_ID und Lieferant_ID. Damit können wir bei jeder Bestellung das Produkt eindeutig zuordnen und es kommt zu keinen Verwechslungen. Die Produkt_ID 721 von unserem Lieferanten A ist ein Bleistift und die vom Lieferanten B eine Rolex-Uhr. Es könnte eventuell zu Verlusten kommen, wenn die Rolex-Uhr für 10 Cent verkauft wird. Aber glücklicherweise können wir zusammengesetzte Fremdschlüssel bilden.

ARTIKEL TEILEN

Hast du Fragen? Hinterlasse einen Kommentar!