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.
  • modul/m290_guko/learningunits/lu08/theorie/c_fk-create-table.1760165338.txt.gz
  • Zuletzt geändert: 2025/10/11 08:48
  • von gkoch