Tach!
Die Tags sind mit , getrennt. Ist dieses Sinnvoll oder die Tags lieber in eine extra Tabelle schreiben und diese mit der BlogID verknüpfen?
Es ist für die weitere Verarbeitung ungünstig, die Tags in einem Feld abzulegen. Du kannst dann nämlich nicht oder nur schwer Abfragen erstellen, wie die Liste aller Tags. Diese bekommst du nur, wenn du die Tag-Felder aller Threads liest, dann anderswo die Strings auseinanderfummelst und irgendwo eindeutig (unique) ablegst. Auch ein Zählen der Häufigkeit geht nur auf diese Weise.
- Suchen nach Tags und Auflistung der dazugehörigen Artikel
Das geht zur Not noch, beispielsweise mit einem regulären Ausdruck. Aber das läuft auf einen Full-Table-Scan hinaus, ein Index kann nicht verwendet werden. Das mag nicht schlimm sein, wenn der Datenbestand überschaubar klein ist. Ein heutiges DBMS zuckt erst bei sehr vielen Datensätzen mit der Wimper.
- Tag Wolke
Dazu brauchst du oben erwähnte Liste mit der Anzahl der Vorkommen.
Die Frage ist noch, wie man die Tabellen strukturiert. Es gibt da zwei Ansätze. Der eine Ansatz ist, eine Tabelle für die Tags und eine Verknüpfungstabelle für die m-n-Beziehung zu den Threads zu erstellen. Wenn Tags vergeben werden, musst du zunächst nachschauen, ob es den bereits gibt, um die ID für die Verknüpfungstabelle zu bekommen. Oder du musst den Tag hinzufügen. Dabei ergibt sich jedoch ein TOCTTOU-Problem, wenn mehrere gleichzeitig dasselbe versuchen. Während der eine Vorgang arbeitet, darf der andere nicht mal lesend zugreifen, weil er sonst falsche Informationen bekommen kann. Für diesen Ansatz ist aber die Datenabfrage einfach zu realisieren, weil es keine Redundanzen gibt.
Der andere Ansatz ist, eine Tabelle mit je einem Datensatz für den Thread-Verweis und einen Tagnamen. Das ergibt zwar Redundanzen, die man beim Abfragen mit GROUP BY oder zur Not auch DISTINCT wegbekommt. Andererseits muss man beim Eintragen keine Konkurrenz beachten. Man hat jedoch auch einen höheren Aufwand beim Pflegen der Tags (Löschen, Ändern).
dedlfix.