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 20:58] – gkoch | modul:m290_guko:learningunits:lu08:theorie:b_fk-grundlagen [2025/10/20 14:17] (aktuell) – gkoch | ||
|---|---|---|---|
| Zeile 40: | Zeile 40: | ||
| <WRAP round 80% center> | <WRAP round 80% center> | ||
| - | **Warum nur *eine* Kategorie pro Zeile?** | + | **Warum nur //eine// Kategorie pro Zeile?** |
| - | Komma-Listen wirken bequem, sind aber **ungünstig**: | + | Komma-Listen wirken bequem, sind aber ungünstig: |
| - | * **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/ |
| - | **Besser:** Pro Zeile **eine** Kategorie. Für mehrere Kategorien pro Post (N: | + | **Besser:** Pro Zeile **eine** Kategorie. Für mehrere Kategorien pro Post (N: |
| + | </ | ||
| Zeile 55: | 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 67: | Zeile 63: | ||
| * **Fehleranfällig**: | * **Fehleranfällig**: | ||
| * **Aufwendig**: | * **Aufwendig**: | ||
| + | * **Nur eine Kategorie möglich**: Idealerweise möchten wir aber mehrere Kategorien pro Blog-Post vergeben – z.B. beim Blog-Post «Utrecht – 10 Sehenswürdigkeiten»: | ||
| </ | </ | ||
| Zeile 109: | Zeile 106: | ||
| //Gleicher Autor, unterschiedliche E-Mail → Daten sind inkonsistent.// | //Gleicher Autor, unterschiedliche E-Mail → Daten sind inkonsistent.// | ||
| - | + | <WRAP center | |
| - | ==== Warum N:M (Posts ↔ Kategorien) auflösen? ==== | + | [[https://www.youtube.com/watch? |
| - | Ein Post kann **mehreren** Kategorien zugeordnet sein (z. B. *Hasselt* → *Belgien* **und** *Städtereise*). Eine Kategorie enthält **viele** Posts. Das ist **N:M**. | + | |
| - | + | ||
| - | **Fehlversuch 1 – Duplikate statt Beziehung: | + | |
| - | <WRAP center | + | |
| - | ^ id ^ post_title | + | |
| - | | 4 | Hasselt – 10 Highlights | + | |
| - | | 5 | Hasselt – 10 Highlights | + | |
| - | </WRAP> | + | |
| - | //Titel steht doppelt → Änderungen/ | + | |
| - | + | ||
| - | **Fehlversuch 2 – Kommaliste | + | |
| - | <WRAP center box 80% round> | + | |
| - | ^ id ^ post_title | + | |
| - | | 4 | Hasselt – 10 Highlights | + | |
| - | </ | + | |
| - | //Für die DB ist «Belgien,Städtereise» nur Text: keine Prüfbarkeit, | + | |
| - | + | ||
| - | <WRAP tip round 80% center> | + | |
| - | **Besser | + | |
| - | Trennung in **users**, **posts**, **categories** und die **Zwischentabelle post_category** (eine Paarung pro Zeile: //(post_id, category_id)//). | + | |
| - | So bleiben Schlüssel **eindeutig**, Daten **prüfbar** | + | |
| </ | </ | ||
| ==== 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. |