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:22] – 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:// |
| - | Ein einzelner Post kann zu mehreren Kategorien gehören | + | |
| - | + | ||
| - | **Variante | + | |
| - | <WRAP center box 80% round> | + | |
| - | ^ id ^ post_title | + | |
| - | | 4 | Hasselt | + | |
| - | | 5 | Hasselt – 10 Highlights | + | |
| - | Hier wird derselbe Post mehrfach angelegt, nur um verschiedene Kategorien | + | |
| - | + | ||
| - | **Variante 2: Komma-Liste in einer Spalte** | + | |
| - | <WRAP center box 80% round> | + | |
| - | ^ id ^ post_title | + | |
| - | | 4 | Hasselt – 10 Highlights | + | |
| </ | </ | ||
| - | In dieser Form steckt mehr als ein Wert in einer Zelle. Die Datenbank kann nicht prüfen, ob „Belgien“ und „Städtereise“ tatsächlich gültige Kategorien sind (kein Fremdschlüssel). Abfragen werden umständlich („LIKE“-Suchen, | ||
| - | |||
| - | <WRAP tip round 80% center> | ||
| - | **Bessere Lösung:** | ||
| - | Wir trennen **posts** und **categories** und führen eine **Zwischentabelle** // | ||
| - | </ | ||
| - | |||
| ==== Ausblick ==== | ==== Ausblick ==== | ||
| - | In **LU08c** | + | Auf der nächsten Seite bauen wir genau dieses Mehrtabellen-Schema **mit Fremdschlüsseln** auf und füllen es mit den obigen Reiseblog-Beispieldaten. |