Hallo,
Häufig kann man ja mittlerweile "Tags" angeben. Wenn ich also eine Nachricht über Griechenland eingebe, könnte ich als Tags zum Beispiel "Athen; Finanzkrise" eingeben.
dann sollten dieser Nachricht in einer Zuordnungstabelle zwei Einträge zugeordnet werden:
Tabelle "tags"
news_id | tag
----------------------
4711 | Athen
4711 | Finanzkrise
Und nein, es wäre keine gute Idee, die Tags noch einmal in einer Nachschlagetabelle abzuspeichern:
Tabelle "news_tags"
news_id | tag_id
-----------------
4711 | 258
4711 | 107
Tabelle tags
tag_id | tag
------------------
258 | Athen
107 | Finanzkrise
denn das Schlagwort "Athen" in Zusammenhang mit der Finanzkrise in Griechenland hat nichts mit dem Schlagwort "Athen" mit einem Artikel über das alte Griechenland zu tun. Hat sich derjenige, der verschlagwortet, vertan - und ändert das Schlagwort beim Antike-Artikel in "Athene" ab, so darf sich das Schlagwort beim Finanzkrisenartikel ja nicht ebenfalls ändern.
Ein Index über die tag-Spalte genügt vollständig, um schnell die Artikel zu einem bestimmten Schlagwort zu finden.
Geht das denn theoretisch? Also reicht da eine Trennung mit Semikolon, um eine WHERE-Abfrage in MySQL zu starten, die sich letzten Endes nur auf "Athen" konzentriert, obwohl da auch noch "Finanzkrise" mit in der Zeile steht?
Es wäre eine extrem bescheidene Idee in der Nachrichtentabelle eine Spalte "tags" zu haben, in der die Schlagworte per Trennzeichen getrennt ständen.
news_id | news_text | tags
----------------------------------------------------
4711 | Die Finanzkrise ... | Athen;Finanzkrise
Dann liegen die Daten in der Spalte tags nicht atomar vor. Das ist ein Vestoß gegen die Normalisierungsregeln und somit klares Anzeichen von miserablem Tabellendesign:
Athen ließe sich jetzt über einen Index noch schnell finden, Finanzkrise nicht mehr - außer über einen Volltextindex. Schlagworte sind jedoch ganz genau dazu da, einen Volltextindex *nicht* zu benötigen, und dennoch die gewünschten Artikel zu finden.
Freundliche Grüße
Vinzenz