Jag skulle råda dig att använda ett typiskt många-till-många-förhållande mellan meddelanden och taggar.
Det skulle innebära att du behöver 3 bord.
Messages
(kolumnerId
,UserId
ochContent
)Tags
(kolumnerId
ochTagName
)TagMessageRelations
(kolumner:MessageId
ochTagId
- för att skapa kopplingar mellan meddelanden och taggar - via främmande nycklar som pekar påMessages.Id
/Tags.Id
)
På så sätt lagrar du inte en tagg flera gånger utan skapar bara en ny relation till ett meddelande (om den taggen redan finns i taggtabellen förstås).
På så sätt kan du
- enkelt räkna hur många taggar det finns (
SELECT COUNT(*) FROM Tags
) - spara bara varje tagg en gång och sökning efter taggar kan enkelt indexeras
- eller räkna hur många gånger en viss tagg användes per användare - till exempel:
SELECT
COUNT(*)
FROM Tags
INNER JOIN TagMessageRelations ON Tags.Id = TagMessageRelations.TagId
INNER JOIN Messages ON TagMessageRelations.MessageId = Messages.Id
GROUP BY Messages.UserId