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.
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_id (PK)
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_id (PK)
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.
bestellung_id (PK)
bestellung_id (FK)
produkt_id (FK)
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.
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
- kunden_id ist die Fremdschlüsselspalte.
- kunden ist die referenzierte Tabelle.
- 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.
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.