Создание базы данных TAG - PullRequest
4 голосов
/ 15 января 2011

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

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

Ответы [ 2 ]

7 голосов
/ 15 января 2011

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

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'
1 голос
/ 15 января 2011

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

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

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

...