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
,UserId
ogContent
)Tags
(kolonneId
ogTagName
)TagMessageRelations
(kolonner:MessageId
ogTagId
- 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