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:23] – 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 | + | [[https:// |
| - | Ein einzelner Post kann zu mehreren Kategorien gehören (z. B. //Hasselt// → //Belgien// und // | + | |
| - | + | ||
| - | **Variante 1: Duplikate statt Beziehung** | + | |
| - | <WRAP center box 80% round> | + | |
| - | ^ id ^ post_title | + | |
| - | | 4 | Hasselt – 10 Highlights | + | |
| - | | 5 | Hasselt – 10 Highlights | + | |
| </ | </ | ||
| - | Hier wird derselbe Post mehrfach angelegt, nur um verschiedene Kategorien zu speichern. Ändert sich der Titel oder der Autor, müssen mehrere Zeilen angepasst werden. Beim Löschen bleibt schnell ein „Zwilling“ übrig – das macht Datenpflege fehleranfällig. | ||
| - | |||
| - | **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. |