SQL – Beziehungen zwischen Tabellen

1. Was sind relationale Datenbanken?

Eine relationale Datenbank speichert Informationen in mehreren Tabellen. Diese Tabellen können über gemeinsame Schlüssel miteinander verbunden werden.

Durch Beziehungen können doppelte Daten reduziert und Informationen übersichtlich verwaltet werden.

Beispiel

Ein Online-Shop speichert Kundendaten in der Tabelle kunden und Bestellungen in der Tabelle bestellungen.


2. PRIMARY KEY – Primärschlüssel

Ein Primärschlüssel identifiziert jeden Datensatz einer Tabelle eindeutig. Ein Primärschlüssel darf keine doppelten Werte oder NULL enthalten.

SQL-Code

CREATE TABLE kunden (
    kunden_id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    stadt VARCHAR(100)
);

Beispiel: kunden

kunden_id (PK) name stadt
1 Anna Müller Berlin
2 Max Schmidt Leipzig
3 Lisa Weber Dresden

Die kunden_id ist der Primärschlüssel. Jeder Kunde besitzt eine eindeutige Nummer.


3. FOREIGN KEY – Fremdschlüssel

Ein Fremdschlüssel ist eine Spalte, die auf einen Primärschlüssel oder einen anderen eindeutigen Schlüssel einer anderen Tabelle verweist.

Dadurch wird eine Beziehung zwischen den Tabellen hergestellt.

SQL-Code

CREATE TABLE bestellungen (
    bestellung_id INT AUTO_INCREMENT PRIMARY KEY,
    kunden_id INT NOT NULL,
    bestelldatum DATE NOT NULL,

    FOREIGN KEY (kunden_id)
        REFERENCES kunden(kunden_id)
);

Beispiel: bestellungen

bestellung_id (PK) kunden_id (FK) bestelldatum
101 1 2026-10-01
102 2 2026-10-05
103 1 2026-10-10

Die kunden_id in der Tabelle bestellungen verweist auf die kunden_id in der Tabelle kunden.

Merken: PRIMARY KEY identifiziert einen Datensatz. FOREIGN KEY stellt eine Beziehung zu einer anderen Tabelle her.

4. 1:1-Beziehung – Eins zu eins

Bei einer 1:1-Beziehung gehört zu einem Datensatz der ersten Tabelle höchstens ein Datensatz der zweiten Tabelle.

Benutzer

benutzer_id (PK)

1 : 1
Profil

benutzer_id (FK, UNIQUE)

SQL-Code

CREATE TABLE benutzer (
    benutzer_id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL
);

CREATE TABLE profile (
    profil_id INT AUTO_INCREMENT PRIMARY KEY,
    benutzer_id INT NOT NULL UNIQUE,
    beschreibung TEXT,

    FOREIGN KEY (benutzer_id)
        REFERENCES benutzer(benutzer_id)
);

Durch UNIQUE kann dieselbe benutzer_id in der Tabelle profile nur einmal vorkommen.


5. 1:n-Beziehung – Eins zu viele

Bei einer 1:n-Beziehung kann ein Datensatz der ersten Tabelle mit mehreren Datensätzen der zweiten Tabelle verbunden sein.

Kunden

kunden_id (PK)

1 : n
Bestellungen

kunden_id (FK)

Ein Kunde kann mehrere Bestellungen aufgeben. Jede Bestellung gehört in diesem Beispiel genau einem Kunden.

Beispiel

Kunde Bestellung
Anna Müller 101
Anna Müller 103
Max Schmidt 102

Die Fremdschlüsselspalte befindet sich auf der n-Seite der Beziehung, also in der Tabelle bestellungen.


6. n:m-Beziehung – Viele zu viele

Bei einer n:m-Beziehung können mehrere Datensätze der ersten Tabelle mit mehreren Datensätzen der zweiten Tabelle verbunden sein.

Eine solche Beziehung wird in relationalen Datenbanken üblicherweise durch eine zusätzliche Zwischentabelle umgesetzt.

Bestellungen

bestellung_id (PK)

1 : n
Bestellpositionen

bestellung_id (FK)

produkt_id (FK)

n : 1
Produkte

produkt_id (PK)

Eine Bestellung kann mehrere Produkte enthalten. Ein Produkt kann in mehreren Bestellungen vorkommen.

SQL-Code

CREATE TABLE produkte (
    produkt_id INT AUTO_INCREMENT PRIMARY KEY,
    produktname VARCHAR(100) NOT NULL,
    preis DECIMAL(10,2) NOT NULL
);

CREATE TABLE bestellpositionen (
    bestellung_id INT NOT NULL,
    produkt_id INT NOT NULL,
    menge INT NOT NULL,

    PRIMARY KEY (bestellung_id, produkt_id),

    FOREIGN KEY (bestellung_id)
        REFERENCES bestellungen(bestellung_id),

    FOREIGN KEY (produkt_id)
        REFERENCES produkte(produkt_id)
);

Die Zwischentabelle enthält zwei Fremdschlüssel. Beide Spalten bilden zusammen einen zusammengesetzten Primärschlüssel.

Hinweis: Dieses Beispiel erlaubt jedes Produkt nur einmal pro Bestellung. Die Menge wird in der Spalte menge gespeichert.

7. REFERENCES – Tabellen verbinden

Mit REFERENCES wird festgelegt, auf welche Tabelle und Spalte ein Fremdschlüssel verweist.

SQL-Code

FOREIGN KEY (kunden_id)
REFERENCES kunden(kunden_id)

Erklärung

  1. kunden_id ist die Fremdschlüsselspalte.
  2. kunden ist die referenzierte Tabelle.
  3. kunden(kunden_id) bezeichnet den Zielschlüssel.

8. Referenzielle Integrität

Die referenzielle Integrität stellt sicher, dass Fremdschlüsselwerte auf gültige Datensätze verweisen.

Beispiel

Wenn ein Kunde mit der kunden_id 99 nicht existiert, darf bei einer entsprechenden Fremdschlüsselbedingung keine Bestellung für diesen Kunden eingefügt werden.

SQL-Code

INSERT INTO bestellungen
    (kunden_id, bestelldatum)
VALUES
    (99, '2026-10-21');

Dieser Befehl verursacht einen Fehler, wenn die kunden_id 99 in der Tabelle kunden nicht vorhanden ist.


9. ON DELETE RESTRICT

ON DELETE RESTRICT verhindert das Löschen eines referenzierten Datensatzes, solange abhängige Datensätze vorhanden sind.

SQL-Code

FOREIGN KEY (kunden_id)
REFERENCES kunden(kunden_id)
ON DELETE RESTRICT

Ein Kunde kann nicht gelöscht werden, solange Bestellungen auf ihn verweisen.


10. ON DELETE CASCADE

ON DELETE CASCADE löscht abhängige Datensätze automatisch mit, wenn der referenzierte Datensatz gelöscht wird.

SQL-Code

FOREIGN KEY (kunden_id)
REFERENCES kunden(kunden_id)
ON DELETE CASCADE

Wird ein Kunde gelöscht, werden auch seine zugehörigen Bestellungen gelöscht.

Achtung: CASCADE kann viele Datensätze automatisch löschen. Deshalb sollte diese Option sorgfältig eingesetzt werden.

11. ON DELETE SET NULL

Mit ON DELETE SET NULL wird der Fremdschlüssel auf NULL gesetzt, wenn der referenzierte Datensatz gelöscht wird.

SQL-Code

CREATE TABLE bestellungen_archiv (
    bestellung_id INT AUTO_INCREMENT PRIMARY KEY,
    kunden_id INT NULL,

    FOREIGN KEY (kunden_id)
        REFERENCES kunden(kunden_id)
        ON DELETE SET NULL
);

Die Fremdschlüsselspalte muss dafür NULL-Werte erlauben.


12. ON UPDATE CASCADE

Mit ON UPDATE CASCADE werden Fremdschlüsselwerte automatisch angepasst, wenn sich der referenzierte Schlüssel ändert.

SQL-Code

FOREIGN KEY (kunden_id)
REFERENCES kunden(kunden_id)
ON UPDATE CASCADE

Wenn sich eine kunden_id ändert, werden die zugehörigen Fremdschlüsselwerte automatisch aktualisiert.


13. Fremdschlüssel nachträglich erstellen

Mit ALTER TABLE kann ein Fremdschlüssel auch nach dem Erstellen einer Tabelle hinzugefügt werden.

SQL-Code

ALTER TABLE bestellungen
ADD CONSTRAINT fk_bestellungen_kunden
FOREIGN KEY (kunden_id)
REFERENCES kunden(kunden_id);

Die vorhandenen Daten müssen bereits die Fremdschlüsselbedingung erfüllen. Außerdem müssen die Spaltentypen zueinander passen.


14. Übersicht der Beziehungstypen

Beziehung Bedeutung Beispiel
1:1 Ein Datensatz zu höchstens einem anderen Benutzer – Profil
1:n Ein Datensatz zu mehreren anderen Kunde – Bestellungen
n:m Mehrere Datensätze zu mehreren anderen Bestellungen – Produkte

15. Praktische Übungen

Aufgabe 1

Welche Beziehung besteht zwischen einem Kunden und seinen Bestellungen?

Lösung anzeigen

Eine 1:n-Beziehung. Ein Kunde kann mehrere Bestellungen haben.

Aufgabe 2

Was ist der Unterschied zwischen PRIMARY KEY und FOREIGN KEY?

Lösung anzeigen

Ein PRIMARY KEY identifiziert einen Datensatz eindeutig. Ein FOREIGN KEY verweist auf einen Schlüssel einer anderen Tabelle.

Aufgabe 3

Warum benötigt man bei einer n:m-Beziehung eine Zwischentabelle?

Lösung anzeigen

Die Zwischentabelle speichert die Zuordnungen zwischen den beiden Tabellen.

Aufgabe 4

Was passiert bei ON DELETE CASCADE?

Lösung anzeigen

Beim Löschen eines referenzierten Datensatzes werden die abhängigen Datensätze automatisch mitgelöscht.

Aufgabe 5

Erstellen Sie eine Tabelle lieferungen mit einem Fremdschlüssel auf bestellungen.

Lösung anzeigen
CREATE TABLE lieferungen (
    lieferung_id INT AUTO_INCREMENT PRIMARY KEY,
    bestellung_id INT NOT NULL,
    lieferdatum DATE,

    FOREIGN KEY (bestellung_id)
        REFERENCES bestellungen(bestellung_id)
);

16. Zusammenfassung

Relationale Datenbanken verbinden Tabellen mithilfe von Schlüsseln. PRIMARY KEY identifiziert Datensätze eindeutig. FOREIGN KEY stellt Beziehungen zwischen Tabellen her. Es gibt 1:1-, 1:n- und n:m-Beziehungen. Die referenzielle Integrität schützt die Konsistenz der gespeicherten Daten.