Как лучше сохранять теги к посту?

danneo

Честный
Регистрация
13 Ноя 2007
Сообщения
1.527
Реакции
121
Нужно к записям добавлять теги (фразы). При добавлении новой записи вводить часть тега, и выводилось чтобы варианты уже добавленных ранее (чтобы выбрать из предложенных). Не знаю, как в большинстве CMS сделаны теги.
Я вижу два решения:
1. во внешнюю таблицу (id, text, postid) сохранять теги поста. Теги будут дублироваться.
2. во внешнюю таблицу (id, text) сохранять только уникальные теги, а у поста сохранять список id тегов: tagsid (12,32,532 и т.д.). Так таблица будет меньше.
Насколько знаю, в DLE, WP делается по 1-му варианту - теги к каждому посту. Где-то видел, что у тега считается счетчик, чтобы потом выводить в облаке (по размерам счетчика). Но мне облако не нужно.
В чем "подвох"? Какой вариант лучше?
 
По первому варианту есть возможность отредактировать название тега, думаю, поэтому используется такой вариант.
 
1. во внешнюю таблицу (id, text, postid) сохранять теги поста. Теги будут дублироваться.

Насколько знаю, в DLE, WP делается по 1-му варианту - теги к каждому посту.
Только через промежуточную таблицу связей:
id, text - теги, на поле text поставить UNIQUE KEY
tag_id, post_id - связи
тогда отредактировав тег в таблице тегов, он автоматически меняется для всех постов, через таблицу связей можно подсчитать сколько у тега новостей, при построении облака тегов отпадает фильтр group by по текстовому полю
 
Если "сохранять список id тегов: tagsid (12,32,532 и т.д.)" тогда выборка будет что-то вроде SELECT CONCAT(text) FROM tags WHERE tag_id IN ( 12,32,532 и т.д. ) против первого варианта SELECT text FROM tags WHERE post_id = 532
Выводы: 1-й вариант выборка будет выполнятся быстрее, 2 - более понятная структура, и любой другой специалист легко разберется.
 
Последнее редактирование:
ИМХО лучше 3-й вариаент. Есть таблица постов, есть таблица уникальных тегов и есть таблица связи id поста, id тега (может быть несколько строк). Тогда структура еще понятнее и скорость обработки запросов если поставить индексы будет высокая
 
Назад
Сверху