Primary Key
Der Primary Key (Primärschlüssel) ist eine Spalte oder Kombination von SQL Spalten, die jeden Datensatz in einer SQL Tabelle eindeutig identifiziert.
Jeder Wert im Primärschlüssel muss einzigartig sein und darf nicht NULL sein.
Entspricht dem Schlüsselattribut im ERM.
Primary Key Konzept:
Tabelle OHNE Primary Key:
┌─────────┬──────────┬───────┐
│ Name │ Nachname │ Alter │ ← Wie eindeutig
├─────────┼──────────┼───────┤ identifizieren?
│ Max │ Müller │ 20 │
│ Max │ Müller │ 20 │ ← Duplikat!
│ Anna │ Schmidt │ 22 │
└─────────┴──────────┴───────┘
Tabelle MIT Primary Key:
┌────┬─────────┬──────────┬───────┐
│ ID │ Name │ Nachname │ Alter │
├────┼─────────┼──────────┼───────┤
│ 1 │ Max │ Müller │ 20 │ ← Eindeutig!
│ 2 │ Max │ Müller │ 20 │ ← Eindeutig!
│ 3 │ Anna │ Schmidt │ 22 │ ← Eindeutig!
└────┴─────────┴──────────┴───────┘
↑
Primary Key
Eigenschaften:
┌──────────────────┐
│ UNIQUE │ ← Wert darf nur 1x vorkommen
└────────┬─────────┘
│
┌────────▼─────────┐
│ NOT NULL │ ← Darf nicht leer sein
└────────┬─────────┘
│
┌────────▼─────────┐
│ UNVERÄNDERLICH │ ← Sollte sich nicht ändern
└──────────────────┘
Primary Key in Beziehungen:
Tabelle: Schueler (Parent)
┌────────────┬──────────┐
│ schueler_id│ name │ ← Primary Key
├────────────┼──────────┤
│ 1 │ Max │
│ 2 │ Anna │
└────────────┴──────────┘
│
│ wird referenziert von
▼
Tabelle: Noten (Child)
┌─────────┬────────────┬──────┐
│ note_id │ schueler_id│ note │
├─────────┼────────────┼──────┤ ← Foreign Key
│ 101 │ 1 │ 2.0 │
│ 102 │ 1 │ 1.5 │
│ 103 │ 2 │ 2.5 │
└─────────┴────────────┴──────┘
Syntax
Einfacher Primary Key
CREATE TABLE Kurse (
kurs_id INT PRIMARY KEY, -- ← Primärschlüssel
kurs_name VARCHAR(100),
lehrer_name VARCHAR(100)
);
Primary Key nachträglich definieren
CREATE TABLE Kurse (
kurs_id INT,
kurs_name VARCHAR(100),
PRIMARY KEY (kurs_id) -- ← Am Ende
);
Zusammengesetzter Primary Key
CREATE TABLE Einschreibung (
schueler_id INT,
kurs_id INT,
einschreibedatum DATE,
PRIMARY KEY (schueler_id, kurs_id) -- ← Beide zusammen!
);
Arten von Primary Keys
1. Natural Key (Natürlicher Schlüssel):
┌──────────┬──────────┐
│ ISBN │ Buchtitel│ ← ISBN ist natürlicher PK
├──────────┼──────────┤
│978-3-16..│ SQL Buch │
└──────────┴──────────┘
2. Surrogate Key (Künstlicher Schlüssel):
┌────┬──────────┬──────────┐
│ ID │ ISBN │ Buchtitel│ ← ID ist künstlicher PK
├────┼──────────┼──────────┤
│ 1 │978-3-16..│ SQL Buch │
└────┴──────────┴──────────┘
3. Composite Key (Zusammengesetzter Schlüssel):
┌───────────┬─────────┬──────┐
│StudentID │ KursID │ Note │ ← Beide zusammen = PK
├───────────┼─────────┼──────┤
│ 1 │ 101 │ 2.0 │
│ 1 │ 102 │ 1.5 │ ← Kombination eindeutig
└───────────┴─────────┴──────┘
Prüfungsrelevant
Primary Key Eigenschaften:
- UNIQUE: Jeder Wert nur 1x
- NOT NULL: Darf nicht leer sein
- Pro Tabelle: nur 1 Primary Key
Zweck:
- Eindeutige Identifikation jeder Zeile
- Referenzierung durch Foreign Key
- Index wird automatisch erstellt (schneller!)
Arten:
- Natural Key: Existierende Daten (z.B. ISBN)
- Surrogate Key: Künstliche ID (meist INT AUTO_INCREMENT)
- Composite Key: Mehrere Spalten kombiniert
Häufige Fehler
- Primary Key ändern
UPDATE Schueler SET id = 999 WHERE id = 1; -- ❌ Schlecht!
→ Besser: IDs nie ändern!
- NULL als Primary Key
INSERT INTO Schueler (id, name) VALUES (NULL, 'Max'); -- ❌ Fehler!
- Doppelte Werte
INSERT INTO Schueler (id, name) VALUES (1, 'Max');
INSERT INTO Schueler (id, name) VALUES (1, 'Anna'); -- ❌ Fehler!
Best Practices
- AUTO_INCREMENT verwenden
CREATE TABLE Schueler (
id INT AUTO_INCREMENT PRIMARY KEY, -- ✓ Automatisch
name VARCHAR(100)
);
- Kurze Namen
idstattschueler_identifikationsnummerstudent_idwenn mehrere Tabellen
- INT oder BIGINT
- INT: bis 2 Milliarden
- BIGINT: bis 9 Quintillion
- Nicht aussagekräftige Werte
- Keine Namen als PK (können sich ändern)
- Besser: Künstliche IDs
Siehe auch
- Foreign Key - Verweist auf Primary Key
- SQL Tabelle - Enthält Primary Keys
- Normalisierung - Benötigt Primary Keys