Je vous conseillerais d'utiliser une relation typique plusieurs à plusieurs entre les messages et les balises.
Cela signifierait que vous avez besoin de 3 tables.
Messages
(colonnesId
,UserId
etContent
)Tags
(colonnesId
etTagName
)TagMessageRelations
(colonnes :MessageId
etTagId
- pour faire les liens entre les messages et les balises - via des clés étrangères pointant versMessages.Id
/Tags.Id
)
De cette façon, vous ne stockez pas une balise plusieurs fois, mais créez uniquement une nouvelle relation avec un message (si cette balise existe déjà dans la table des balises bien sûr).
De cette façon, vous pouvez
- comptez facilement le nombre de balises il y a (
SELECT COUNT(*) FROM Tags
) - n'enregistrez chaque balise qu'une seule fois et la recherche de balises peut être facilement indexée
- ou compter combien de fois une certaine balise a été utilisée par utilisateur - par exemple :
SELECT
COUNT(*)
FROM Tags
INNER JOIN TagMessageRelations ON Tags.Id = TagMessageRelations.TagId
INNER JOIN Messages ON TagMessageRelations.MessageId = Messages.Id
GROUP BY Messages.UserId