Бих посъветвал да използвате типична връзка много към много между съобщения и тагове.
Това би означавало, че имате нужда от 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