Тэги для всех сущностей сайта.

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Ответить
Аватара пользователя
vova07
Сообщения: 1004
Зарегистрирован: 2012.11.29, 14:52
Откуда: Chisinau, Moldova

Тэги для всех сущностей сайта.

Сообщение vova07 »

Здравствуйте!
Есть простая задача на текущий момент, но нет времени на тесты для рационального выбора, по этому хотел бы послушать мнение тех у кого есть опыт создания подобного функционала.

Задача: Реализовать возможность добавление тэгов для любой сущности на сайте. Посты, страницы, галереи, и.т.д. с возможностью в далнейшем реализовать посик по тэгам любых сущностей и вывод найденых результатов.

Вопрос заключается в том как лучще организовать стурктуру БД.

1) Одна таблица:

Код: Выделить всё

id (ID тэга) | model_id (ID связаной модели) | model_class_id (ID класа модели) | name (Сам тэг)
Плюсы: Одна таблица, меньше запросов.
Минусы: Тот же тэг может повторятся несколько раз, что не совсем правильно.

2) Две таблицы:

Код: Выделить всё

id (ID тэга) | name (Сам тэг)
tag_id (ID тэга) | model_id (ID связаной модели) | model_class_id (ID класа модели)
Плюсы: Более правильная структура данных.
Минусы: 2 таблицы, и соответсвенно больше запросов, для простого выода, и того же посика по тэгам.

Что посоветуйте коллеги?
HQ0
Сообщения: 182
Зарегистрирован: 2012.10.17, 17:21

Re: Тэги для всех сущностей сайта.

Сообщение HQ0 »

Нет времени на теоретические заморочки. Делай по первому варианту и приходи обратно только если возникнут проблемы. :)
Аватара пользователя
vova07
Сообщения: 1004
Зарегистрирован: 2012.11.29, 14:52
Откуда: Chisinau, Moldova

Re: Тэги для всех сущностей сайта.

Сообщение vova07 »

Спасибо за ответ. Решил делать по 2 варианту. Он более логичен, а кэш поможет решить минусы.
А проблемы не должны возникнуть, но кто его знает.
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: Тэги для всех сущностей сайта.

Сообщение maleks »

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

Во 2)-ом варианте надо еще на одну таблицу разбивать:

Код: Выделить всё

id (ID тэга) | name (Сам тэг)
what| model_id (ID связаной модели) | model_class_id (ID класа модели)
what| id (ID тэга)  
Аватара пользователя
SiZE
Сообщения: 2817
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Тэги для всех сущностей сайта.

Сообщение SiZE »

Три таблицы:
1. Справочник тегов
2. Справочник модулей/моделей
3. Таблица связи тега и модуля
Аватара пользователя
vova07
Сообщения: 1004
Зарегистрирован: 2012.11.29, 14:52
Откуда: Chisinau, Moldova

Re: Тэги для всех сущностей сайта.

Сообщение vova07 »

@maleks что такое "what" поле? Идентификатор модели (сущности)?
@SiZE Третья таблица "Справочник модулей/моделей" подразумевалась по умолчанию. Она есть. Хотя она нужна только для целесности данных, и в случаях когда нужна скорость от неё можно отказатся, в пользу например числового хэша namespace модели, что я иногда применяю. (Возможно не правильно, но лишний запрос не нужен.)
За ответы спасибо!
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: Тэги для всех сущностей сайта.

Сообщение maleks »

Задача: Реализовать возможность добавление тэгов для любой сущности на сайте.
Это идентификатор вот этой "любой сущности сайта".
Относительно него потом можно хранить не только теги, но и настройки комментариев, сами комментарии, какое нибудь голосование, рейтинги и т.д.

На практике в эту таблицу и поле титл и анонс перекачевывает (это нужно для построения списков).
Аватара пользователя
vova07
Сообщения: 1004
Зарегистрирован: 2012.11.29, 14:52
Откуда: Chisinau, Moldova

Re: Тэги для всех сущностей сайта.

Сообщение vova07 »

Ну "model_class_id (ID класа модели)" и есть этот идентификатор. Возможно не особо ясно написал его название. Про таблицу согласен, так примерно и есть.
Спасибо всем за ответы!
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: Тэги для всех сущностей сайта.

Сообщение maleks »

Я так понял что model_class_id - это вместо имени класса. Вроде:
model_class_id | class
1 | yii\models\Post
Аватара пользователя
vova07
Сообщения: 1004
Зарегистрирован: 2012.11.29, 14:52
Откуда: Chisinau, Moldova

Re: Тэги для всех сущностей сайта.

Сообщение vova07 »

Правильно! А разве есть отличие от вашего "what"?
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: Тэги для всех сущностей сайта.

Сообщение maleks »

есть разница. what - это id-шник некоторой модели среди ВСЕХ моделей ВСЕХ типов.
Аватара пользователя
vova07
Сообщения: 1004
Зарегистрирован: 2012.11.29, 14:52
Откуда: Chisinau, Moldova

Re: Тэги для всех сущностей сайта.

Сообщение vova07 »

"model_id (ID связаной модели)" тогда это тоже самое что и ваш "what".
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: Тэги для всех сущностей сайта.

Сообщение maleks »

У вас же разные модели лежат в разных табличках и model_id модели уникален только внутри этой таблички.
Т.е. сущность характеризуется грубо говоря - типом(именем класса) и номером внутри типа(PK в табличке). И вот эту сущность мы начинаем идентифицировать как what.

what => тип, idm
1 => кроссовки, 1
2 => кепки, 1
3 => новости, 100
Аватара пользователя
vova07
Сообщения: 1004
Зарегистрирован: 2012.11.29, 14:52
Откуда: Chisinau, Moldova

Re: Тэги для всех сущностей сайта.

Сообщение vova07 »

Спасибо за теорию! Не думал что из моих сообщений кто-то подумает что я вообще не понимаю ситуацию.
Все что вы написали правда, только я вот не могу понять чем моя структура отличается от той что вы предложили, и чем она не устраивает данную ситуацию.
Попробую переформулировать:

Код: Выделить всё

// Таблица тэгов:
id (ID тэга) | name (Название тэга)
1 | мой первый тэг
// Таблица связей модели (любой сущности) с тэгом:
tag_id (ID тэга из таблицы выше) | model_id (ID модели - это именно уникальный PK из таблицы сущности) | model_class_id (ID класа модели - это другой PK который мы берем из таблицы что ниже)
1    |    2    |     3
// Таблица моделей (сущностей): 
id | name
3  | app\models\Model
P.S. Я задачу решил ещё в первом моём комментарии, сейчас беседу я подерживаю больше для понимания других решений, возможных вариантов, хотя пока что-то для себя новое я не смог увидить.
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: Тэги для всех сущностей сайта.

Сообщение maleks »

vova07 писал(а): Попробую переформулировать:
Зачем? Что означает вариант 2 я понял и из первого сообщения...
Аватара пользователя
vova07
Сообщения: 1004
Зарегистрирован: 2012.11.29, 14:52
Откуда: Chisinau, Moldova

Re: Тэги для всех сущностей сайта.

Сообщение vova07 »

@maleks Могу только сказать что мы зашли в тупик. Так как выходит что большинство комментов были просто излишни. Спасибо!
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: Тэги для всех сущностей сайта.

Сообщение maleks »

когда до практики дойдете и будете делать например страницу тега, список материалов данного тега, с пагинацией и все такое, может чуть чуть станет понятней о чем это я говорил. ;)
Аватара пользователя
vova07
Сообщения: 1004
Зарегистрирован: 2012.11.29, 14:52
Откуда: Chisinau, Moldova

Re: Тэги для всех сущностей сайта.

Сообщение vova07 »

@maleks Я давно понял что вы подразумеваете. И это точно то что я писал. Вы просто наверное пропустили пару моих прошлих комментариев:
Третья таблица "Справочник модулей/моделей" подразумевалась по умолчанию. Она есть.
Спасибо за ответы!
Woof
Сообщения: 4
Зарегистрирован: 2016.08.24, 11:25

Re: Тэги для всех сущностей сайта.

Сообщение Woof »

А можно где нибудь глянуть реализацию такой системы тегов?
Ответить