Dies ist eine alte Version des Dokuments!
LU08b – Fremdschlüssel & referentielle Integrität
Begriffe:
- Parent/Referenzierte Tabelle: enthält den Primärschlüssel (z. B. person.person_id)
- Child/Referenzierende Tabelle: enthält den Fremdschlüssel (z. B. film.director_id, film_cast.film_id)
- Referentielle Integrität (RI): FK-Werte im Child müssen auf existierende PK-Werte im Parent zeigen
(oder bei erlaubter NULL: NULL sein).
Warum FKs?
- Schützen vor „verwaisten“ Datensätzen (z. B. Cast-Einträge ohne Film).
- Definieren Verhalten bei Änderungen/Löschungen (RESTRICT/NO ACTION, CASCADE, SET NULL).
Syntax-Grundform:
-- in CREATE TABLE oder ALTER TABLE CONSTRAINT fk_name FOREIGN KEY (child_column[, ...]) REFERENCES parent_table(parent_pk_column[, ...]) ON DELETE {RESTRICT|CASCADE|SET NULL} ON UPDATE {RESTRICT|CASCADE|SET NULL};
Wichtig:
- Datentypen & Zeichensatz/Kollation der verknüpften Spalten müssen kompatibel sein.
- FK-Spalten dürfen NOT NULL sein – dann sind NULLs nicht erlaubt (SET NULL wäre dann unzulässig).
- MySQL behandelt NO ACTION faktisch wie RESTRICT.