Doporučil bych postupovat s typickým vztahem many-to-many mezi zprávami a značkami.
To by znamenalo, že potřebujete 3 tabulky.
Messages(sloupceId,UserIdaContent)Tags(sloupceIdaTagName)TagMessageRelations(sloupce:MessageIdaTagId- vytvořit spojení mezi zprávami a značkami - pomocí cizích klíčů směřujících naMessages.Id/Tags.Id)
Tímto způsobem neukládáte značku vícekrát, ale pouze vytváříte nový vztah ke zprávě (pokud tato značka již v tabulce značek samozřejmě existuje).
Tímto způsobem můžete
- snadno spočítejte, kolik značek existují (
SELECT COUNT(*) FROM Tags) - každou značku uložte pouze jednou a vyhledávání značek lze snadno indexovat
- nebo spočítat, kolikrát byla určitá značka použita na uživatele – například:
SELECT
COUNT(*)
FROM Tags
INNER JOIN TagMessageRelations ON Tags.Id = TagMessageRelations.TagId
INNER JOIN Messages ON TagMessageRelations.MessageId = Messages.Id
GROUP BY Messages.UserId