Каким образом лучше реализовать тегирование контента на сайте?

Есть 2 варианта.

1. Сделать классической схемой из 3х таблиц базы данных; content_table, tags_table, content_to_tags_table.

Где первая таблица это таблица контента, вторая таблица это таги, а последняя это связки между контентом и тегами.


2. Сделать 2 таблицы content_table, tags_table. Первая таблица идеинтична той, что в первом случае. Структура 2й таблицы же такова:


CREATE TABLE `dr_test`.`tags_table` (

`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,

`content_id` INT NOT NULL,

`term` VARCHAR( 255 ) NOT NULL,

INDEX ( `term` )

) ENGINE = MYISAM;


То есть, значение поля `term` будет индексом и будет повторятся то кол-во раз, которое им тэгировали контент.


пример:

id | content_id | term

1 | 1 | some_tag

2 | 2 | some_tag


вопрос в том, стоит ли использовать 2й вариант с точки зрения производительности базы данных?
  • Вопрос задан
  • 3587 просмотров
Пригласить эксперта
Ответы на вопрос 3
Borro
@Borro
С точки зрения производительности БД можно использовать первый метод, но таблицу tags_table кешировать в памяти и проводить соответствие в php, тут и БД придется с меньшими объемами данных работать, а также отдавать она будет вам меньший объем, что скажется на скорости работы.
Ответ написан
Комментировать
lalaki
@lalaki
если делаете на каком-либо фреймворке, например, Symfony, или хотя бы используете ORM типа Doctrine, решение очевидно: сначала используете дефолтные механизмы ORM — они дадут тривиальное решение, т.е. скорее всего, вариант 1. А оптимизацией занимаетесь по мере необходимости, глядя в профайлер
Ответ написан
Комментировать
@Masterkey
хотел написать полотнище, а потом подумал, что ключевые моменты для решения задачи вы не написали.
предполагаемая частота в каждую из таблиц
SELECT~UPDATE~DELETE~INSERT
какие они?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы