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
,UserId
aContent
)Tags
(sloupceId
aTagName
)TagMessageRelations
(sloupce:MessageId
aTagId
- 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