2011-01-14 6 views
4

Я отправляю теги в виде tag1, tag2, tag3, ect ... Но я не уверен, как создать макет базы данных с точки зрения производительности и профессионализма.Создание базы данных TAG

Когда кто-то нажимает на тег, я хочу запросить и вытащить каждую страницу с этим тегом.

+2

возможно дубликат [Как вы рекомендуете реализации тегов или тегов] (http://stackoverflow.com/questions/20856/how-do-you-recommend-implementing-tags-or-tagging) – Gordon

ответ

1

Если это все, что вы хотите, то с:

  1. tags стол с tag_id и tag полей, возможно, некоторые другие поля, связанные с тегом, т.е. описания, разрешения ...
  2. page_tags теги таблицу с полями tag_id и page_id для хранения отношений между тегами и страницами (при условии, что у вас есть таблица pages с page_id в качестве столбца индекса). Вы также можете рассмотреть любые дополнительные поля, такие как дата и время добавления тега, кто добавил тег и т. Д.)

Но позже вы можете захотеть добавить такие вещи, как облако меток, для чего потребуются некоторые данные кеширование (вы не хотите перестраивать свои теги каждый раз, когда кто-то что-то что-то что-то подписывает, а не периодически, раз в день, например). Для этого вы можете добавить еще одну таблицу tags_cloud с полями tag_id и count.

7

Сами теги идут в таблицу тегов. Эта таблица содержит только уникальные тег

TAGS 
id | tagname 
1  stack 
2  overflow 

Вы можете создать таблицу поиска для соответствия таблицы тегов в таблицу страниц

PAGES_TAGS 
tag_id | page_id 
1   13 
1   24 
1   11 
2   12 

Тогда вам объединение для запроса страницы, которые имеют какие-тег.

SELECT * 
    FROM pages p 
INNER JOIN pages_tags pt ON p.id = pt.page_id 
INNER JOIN tags t  ON t.id = pt.tag_id 
WHERE tag.name='overflow' 
Смежные вопросы