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:b_fk-grundlagen [2025/10/18 22:36] – gkoch | modul:m290_guko:learningunits:lu08:theorie:b_fk-grundlagen [2025/10/20 14:17] (aktuell) – gkoch | ||
|---|---|---|---|
| Zeile 44: | Zeile 44: | ||
| * **Keine Prüfung / kein FK((Foreign Key = Fremdschlüssel)).** Die Datenbank (DB) kann bei «Belgien, Städtereise» **nicht** prüfen, ob diese Kategorien wirklich existieren. ((Wenn Kategorien und Posts in **separate Tabellen** liegen und per Fremdschlüssel verbunden sind, kontrolliert die DB beim Speichern, ob «Belgien» in der Kategorien-Tabelle vorhanden ist.)) → Tippfehler bleiben unbemerkt ((z. B. «Belgien, Städtereisen» statt «Belgien, Städtereise»)). | * **Keine Prüfung / kein FK((Foreign Key = Fremdschlüssel)).** Die Datenbank (DB) kann bei «Belgien, Städtereise» **nicht** prüfen, ob diese Kategorien wirklich existieren. ((Wenn Kategorien und Posts in **separate Tabellen** liegen und per Fremdschlüssel verbunden sind, kontrolliert die DB beim Speichern, ob «Belgien» in der Kategorien-Tabelle vorhanden ist.)) → Tippfehler bleiben unbemerkt ((z. B. «Belgien, Städtereisen» statt «Belgien, Städtereise»)). | ||
| - | * **Unzuverlässiges Filtern.** Suchen mit LIKE liefern leicht Teiltreffer/ | + | * **Unzuverlässiges Filtern.** Suchen mit LIKE liefern leicht Teiltreffer/ |
| * **Schwierig auszuwerten & langsam.** Zählen/ | * **Schwierig auszuwerten & langsam.** Zählen/ | ||
| Zeile 56: | Zeile 56: | ||
| **Auszug:** | **Auszug:** | ||
| - | <WRAP center box 80% round> | + | {{ :modul:m290_guko:learningunits:lu08:theorie:all_in_one_table_1.png? |
| - | ^ id ^ post_title | + | |
| - | | 1 | Hasselt – 10 Highlights | + | |
| - | | 2 | Utrecht – 10 Sehenswürdigkeiten | + | |
| - | | 3 | Lissabon – 8 Tipps zu den wichtigsten Sehenswürdigkeiten | + | |
| - | </ | + | |
| <WRAP box round 80% center> | <WRAP box round 80% center> | ||
| Zeile 111: | Zeile 106: | ||
| //Gleicher Autor, unterschiedliche E-Mail → Daten sind inkonsistent.// | //Gleicher Autor, unterschiedliche E-Mail → Daten sind inkonsistent.// | ||
| - | + | <WRAP center tip round 80%> | |
| - | ==== Warum eine N:M-Beziehung (Posts ↔ Kategorien) auflösen? ==== | + | [[https:// |
| - | In einer relationalen | + | </ |
| - | + | ||
| - | Bei **N:M** gilt jedoch: Ein Post gehört zu **0…n** Kategorien **und** eine Kategorie enthält **0…n** Posts. | + | |
| - | → Ein einzelnes FK-Feld reicht dafür nicht aus: | + | |
| - | + | ||
| - | * **FK in '' | + | |
| - | * **FK in '' | + | |
| - | * **Kommaliste in einer Spalte | + | |
| - | + | ||
| - | **Lösung: die Zwischentabelle '' | + | |
| - | Wir trennen die Objekte ('' | + | |
| - | So bleibt jede Beziehung **eindeutig** | + | |
| - | + | ||
| - | + | ||
| ==== Ausblick ==== | ==== Ausblick ==== | ||
| Auf der nächsten Seite bauen wir genau dieses Mehrtabellen-Schema **mit Fremdschlüsseln** auf und füllen es mit den obigen Reiseblog-Beispieldaten. | Auf der nächsten Seite bauen wir genau dieses Mehrtabellen-Schema **mit Fremdschlüsseln** auf und füllen es mit den obigen Reiseblog-Beispieldaten. | ||