Бих посъветвал да използвате типична връзка много към много между съобщения и тагове.
Това би означавало, че имате нужда от 3 маси.
Messages(колониId,UserIdиContent)Tags(колониIdиTagName)TagMessageRelations(колони:MessageIdиTagId- за осъществяване на връзките между съобщения и тагове - чрез външни ключове, сочещи къмMessages.Id/Tags.Id)
По този начин не съхранявате маркер няколко пъти, а само създавате нова връзка със съобщение (ако този маркер вече съществува в таблицата с етикети, разбира се).
По този начин можете
- Лесно пребройте колко маркера има (
SELECT COUNT(*) FROM Tags). ) - Запазете всеки маркер само веднъж и търсенето на тагове може лесно да се индексира
- или пребройте колко пъти е бил използван определен маркер на потребител - например:
SELECT
COUNT(*)
FROM Tags
INNER JOIN TagMessageRelations ON Tags.Id = TagMessageRelations.TagId
INNER JOIN Messages ON TagMessageRelations.MessageId = Messages.Id
GROUP BY Messages.UserId