Следующий формат допускает использование нескольких тегов на одну ссылку и позволяет ссылкам использовать одни и те же теги. Это позволяет легко увидеть, какие ссылки популярны, и в то же время избежать хранения дублирующих тегов.
Схема
Links
LinkID
Url
Name
Tags
TagID
Name
LinkTags
LinkID
TagID
Пример данных:
Links
---------------------------------------------------
LinkID URL Name
1 http://avira.com/ Avira Antivirus
2 http://microsoft.com/ Microsoft
---------------------------------------------------
Tags
---------------------------------------------------
TagID Name
---------------------------------------------------
1 Software
2 Antivirus
3 Operating Systems
---------------------------------------------------
LinkTags
---------------------------------------------------
LinkID TagID
---------------------------------------------------
1 1
1 2
2 1
2 3
Запросы
Ссылки и теги:
SELECT Links.*, GROUP_CONCAT(Tags.Name) AS TagList
FROM Links
LEFT JOIN LinkTags
ON LinkTags.LinkID = Links.LinkID
LEFT JOIN Tags
ON Tags.TagID = LinkTags.TagID
GROUP BY Links.LinkID
Десять самых популярных тегов:
SELECT Tags.*
FROM LinkTags
LEFT JOIN Tags
ON Tags.TagID = LinkTags.TagID
GROUP BY LinkTags.TagID
ORDER BY (COUNT(LinkTags.LinkID)) DESC
LIMIT 10