Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
modul:m290_guko:learningunits:lu08:theorie:a_intro [2025/10/11 08:47] – gkoch | modul:m290_guko:learningunits:lu08:theorie:a_intro [2025/10/11 09:46] (aktuell) – gkoch | ||
---|---|---|---|
Zeile 2: | Zeile 2: | ||
**Lernziel: | **Lernziel: | ||
- | (**RESTRICT/ | + | (**RESTRICT/ |
- | **Zeitbedarf: | ||
- | **Voraussetzungen:** CREATE TABLE (PK, NOT NULL, AUTO_INCREMENT), | + | ===== Einführung: Foreign Keys in SQL: Was sind sie und wie wirken sie sich auf Datenbanken aus? ===== |
- | **Inhalt: | + | Foreign Keys sind ein äußerst wichtiges Konzept in der SQL-Datenbankentwicklung. Sie ermöglichen die Beziehung zwischen Tabellen und gewährleisten die |
- | * [[lu08:fk-grundlagen|1) Fremdschlüssel & referentielle | + | |
- | * [[lu08: | + | |
- | * [[lu08: | + | |
- | * [[lu08: | + | |
- | * [[lu08: | + | |
- | ===== ERD (Mini-Filmdatenbank) ===== | ||
- | Wir bleiben beim bekannten Film-Beispiel und ergänzen es um Personen und Besetzungen: | ||
- | < | + | ===== Was ist ein Foreign Key? ===== |
- | [person] (person_id PK, name UNIQUE, ...) | + | |
- | 1 \ | + | |
- | | + | |
- | > | + | |
- | / | + | |
- | [film] (film_id PK, title, released_year, | + | |
- | Regeln: | + | Ein Foreign Key (auch Fremdschlüssel genannt) ist eine Spalte oder eine Gruppe von Spalten in einer Tabelle, die auf die Primärschlüsselspalte(n) einer anderen Tabelle verweisen. Er stellt eine Beziehung zwischen zwei Tabellen her und ermöglicht die Referenzierung von Daten in einer Tabelle durch |
- | - Ein Film kann 0..n Cast-Mitglieder haben (film_cast). | + | |
- | - Eine Person kann 0..n Rollen gespielt haben (film_cast). | + | |
- | - Ein Film hat optional | + | |
- | </ | + | |
- | **Hinweis:** In modernen MySQL-Installationen ist **InnoDB** Standard – wir müssen es nicht explizit angeben. | + | Um die Funktionsweise eines Foreign Keys besser zu verstehen, nehmen wir an, wir hätten zwei Tabellen: ‚Kunden‘ und ‚Bestellungen‘. Jeder Eintrag in der Tabelle ‚Bestellungen‘ ist einem bestimmten Kunden aus der Tabelle ‚Kunden‘ zugeordnet. Um diese Beziehung zwischen den beiden Tabellen herzustellen, |
- | **Start jetzt:** Wenn nötig, wiederhole kurz die Basistabelle: | ||
- | <code sql> | ||
- | CREATE TABLE favourite_film ( | ||
- | film_id INT AUTO_INCREMENT PRIMARY KEY, | ||
- | title VARCHAR(100) NOT NULL, | ||
- | director VARCHAR(50), | ||
- | released_year YEAR, | ||
- | star1 VARCHAR(50) | ||
- | ); | ||
- | INSERT INTO favourite_film | + | ===== ERD (Travel) ===== |
- | VALUES | + | <WRAP center box 80% round> |
+ | < | ||
+ | [Continent] | ||
+ | 1 ─── n | ||
+ | [Country] | ||
+ | 1 ─── n | ||
+ | [Trip] | ||
</ | </ | ||
+ | </ | ||
+ | |||
+ | **Geschäftsregeln (aus LU03):** | ||
+ | * Ein Kontinent hat viele Länder (1:N). | ||
+ | * Ein Land gehört zu genau einem Kontinent (N:1). | ||
+ | * Ein Land hat viele Reisen (1:N). | ||
+ | * Eine Reise findet in genau einem Land statt (N:1). | ||
+ | |||
+ | **Bild-Version (optional): | ||
+ | {{: | ||