Dies ist eine alte Version des Dokuments!
LU08c – Fremdschlüssel direkt beim Erstellen (CREATE TABLE)
Wir definieren drei Tabellen passend zum ERD.
DROP TABLE IF EXISTS film_cast; DROP TABLE IF EXISTS film; DROP TABLE IF EXISTS person; CREATE TABLE person ( person_id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL, UNIQUE(name) ); CREATE TABLE film ( film_id INT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(100) NOT NULL, released_year YEAR, director_id INT NULL, -- optional: Film kann auch ohne gesetzte Regie existieren CONSTRAINT fk_film_director FOREIGN KEY (director_id) REFERENCES person(person_id) ON DELETE SET NULL ON UPDATE RESTRICT ); CREATE TABLE film_cast ( film_id INT NOT NULL, person_id INT NOT NULL, ROLE VARCHAR(50) DEFAULT 'Actor', PRIMARY KEY (film_id, person_id), CONSTRAINT fk_cast_film FOREIGN KEY (film_id) REFERENCES film(film_id) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT fk_cast_person FOREIGN KEY (person_id) REFERENCES person(person_id) ON DELETE RESTRICT ON UPDATE RESTRICT );
Begründung der Aktionen:
- director_id → SET NULL: Regie-Person darf verschwinden, Film bleibt erhalten (FK wird NULL).
- film_cast.film_id → CASCADE: Wird ein Film gelöscht/umbenannt, folgt die Besetzung automatisch.
- film_cast.person_id → RESTRICT: Eine besetzte Person kann nicht einfach gelöscht werden.