Ik zou adviseren om te gaan met een typische veel-op-veel-relatie tussen berichten en tags.
Dat zou betekenen dat je 3 tabellen nodig hebt.
Messages
(kolommenId
,UserId
enContent
)Tags
(kolommenId
enTagName
)TagMessageRelations
(kolommen:MessageId
enTagId
- om de verbindingen tussen berichten en tags te maken - via externe sleutels die verwijzen naarMessages.Id
/Tags.Id
)
Op die manier sla je een tag niet meerdere keren op maar creëer je alleen een nieuwe relatie met een bericht (als die tag natuurlijk al in de tag-tabel bestaat).
Op deze manier kun je
- eenvoudig tel hoeveel tags er zijn (
SELECT COUNT(*) FROM Tags
) - elke tag slechts één keer opslaan en zoeken naar tags kan eenvoudig worden geïndexeerd
- of tel hoe vaak een bepaalde tag is gebruikt per gebruiker - bijvoorbeeld:
SELECT
COUNT(*)
FROM Tags
INNER JOIN TagMessageRelations ON Tags.Id = TagMessageRelations.TagId
INNER JOIN Messages ON TagMessageRelations.MessageId = Messages.Id
GROUP BY Messages.UserId