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:e_many-to-many [2025/10/19 23:01] – gkoch | modul:m290_guko:learningunits:lu08:theorie:e_many-to-many [2025/10/26 18:18] (aktuell) – gkoch | ||
|---|---|---|---|
| Zeile 9: | Zeile 9: | ||
| In einer relationalen Tabelle kann ein Fremdschlüssel **immer nur auf genau eine** Zielzeile verweisen. | In einer relationalen Tabelle kann ein Fremdschlüssel **immer nur auf genau eine** Zielzeile verweisen. | ||
| Bei **N:M** gilt jedoch: **ein Post → mehrere Kategorien** und **eine Kategorie → mehrere Posts**. | Bei **N:M** gilt jedoch: **ein Post → mehrere Kategorien** und **eine Kategorie → mehrere Posts**. | ||
| + | |||
| + | |||
| Das lässt sich mit **einem** FK-Feld nicht sauber abbilden: | Das lässt sich mit **einem** FK-Feld nicht sauber abbilden: | ||
| Zeile 25: | Zeile 27: | ||
| - | === 1:N vs N:M mit Zwischentabelle === | + | === N:M mit Zwischentabelle === |
| - | **users ↔ posts (1:N)** | + | |
| - | {{: | + | |
| **posts ↔ categories (N:M) – korrekt über Zwischentabelle '' | **posts ↔ categories (N:M) – korrekt über Zwischentabelle '' | ||
| Zeile 40: | Zeile 40: | ||
| CREATE TABLE post_category ( | CREATE TABLE post_category ( | ||
| - | post_id | + | |
| - | category_id INT NOT NULL, | + | category_id INT NOT NULL, |
| - | PRIMARY KEY (post_id, category_id), | + | PRIMARY KEY (post_id, category_id), |
| - | FOREIGN KEY (post_id) REFERENCES posts (post_id) ON DELETE CASCADE ON UPDATE CASCADE, | + | FOREIGN KEY (post_id) REFERENCES posts (post_id) ON DELETE CASCADE ON UPDATE CASCADE, |
| - | FOREIGN KEY (category_id) REFERENCES categories (category_id) ON DELETE CASCADE ON UPDATE CASCADE | + | FOREIGN KEY (category_id) REFERENCES categories (category_id) ON DELETE CASCADE ON UPDATE CASCADE |
| ); | ); | ||
| </ | </ | ||
| Zeile 92: | Zeile 92: | ||
| **Erwartung: | **Erwartung: | ||
| - | |||
| - | ===== 4) Aufgaben ===== | ||
| - | |||
| - | * **Aufgabe A:** Fügen Sie eine neue Kategorie `Benelux` (slug: benelux) ein und ordnen Sie //Hasselt – 10 Highlights// | ||
| - | * **Aufgabe B:** Löschen Sie die Kategorie // | ||
| ===== Zusammenfassung ===== | ===== Zusammenfassung ===== | ||
| Zeile 102: | Zeile 97: | ||
| * **N:M** wird **immer** über eine **Zwischentabelle** mit **einer Paarung pro Zeile** modelliert: //(post_id, category_id)// | * **N:M** wird **immer** über eine **Zwischentabelle** mit **einer Paarung pro Zeile** modelliert: //(post_id, category_id)// | ||
| * **Fremdschlüssel** sichern die Datenqualität; | * **Fremdschlüssel** sichern die Datenqualität; | ||
| + | |||
| + | ==== Weiterführende Videos ==== | ||
| + | <WRAP center tip round 80%> | ||
| + | [[https:// | ||
| + | </ | ||
| <WRAP tip round 80% center> | <WRAP tip round 80% center> | ||
| **Ausblick auf LU09:** Wir formulieren dieselben Abfragen für mehrere Tabellen </ | **Ausblick auf LU09:** Wir formulieren dieselben Abfragen für mehrere Tabellen </ | ||