Ich würde zu einer typischen Viele-zu-Viele-Beziehung zwischen Nachrichten und Tags raten.
Das würde bedeuten, dass Sie 3 Tabellen benötigen.
Messages
(SpaltenId
,UserId
undContent
)Tags
(SpaltenId
undTagName
)TagMessageRelations
(Spalten:MessageId
undTagId
- um die Verbindungen zwischen Nachrichten und Tags herzustellen - über Fremdschlüssel, die aufMessages.Id
zeigen /Tags.Id
)
Auf diese Weise speichern Sie ein Tag nicht mehrfach, sondern stellen nur eine neue Beziehung zu einer Nachricht her (wenn dieses Tag natürlich bereits in der Tag-Tabelle vorhanden ist).
Auf diese Weise können Sie
- einfach zählen, wie viele Tags es gibt (
SELECT COUNT(*) FROM Tags
) - jedes Tag nur einmal speichern und die Suche nach Tags können einfach indiziert werden
- oder zählen, wie oft ein bestimmtes Tag verwendet wurde pro Benutzer - zum Beispiel:
SELECT
COUNT(*)
FROM Tags
INNER JOIN TagMessageRelations ON Tags.Id = TagMessageRelations.TagId
INNER JOIN Messages ON TagMessageRelations.MessageId = Messages.Id
GROUP BY Messages.UserId