Jeg vil anbefale at gå med et typisk mange-til-mange-forhold mellem beskeder og tags.
Det ville betyde, at du har brug for 3 borde.
Messages(kolonneId,UserIdogContent)Tags(kolonneIdogTagName)TagMessageRelations(kolonner:MessageIdogTagId- for at skabe forbindelser mellem beskeder og tags - via fremmednøgler, der peger påMessages.Id/Tags.Id)
På den måde gemmer du ikke et tag flere gange, men skaber kun en ny relation til en besked (hvis det tag selvfølgelig allerede findes i tag-tabellen).
På denne måde kan du
- let tæl hvor mange tags der er (
SELECT COUNT(*) FROM Tags) - gem kun hvert tag én gang og søgning efter tags kan nemt indekseres
- eller tæl hvor mange gange et bestemt tag blev brugt pr. bruger - for eksempel:
SELECT
COUNT(*)
FROM Tags
INNER JOIN TagMessageRelations ON Tags.Id = TagMessageRelations.TagId
INNER JOIN Messages ON TagMessageRelations.MessageId = Messages.Id
GROUP BY Messages.UserId