powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Теги для каталога - как лучше спроектировать?
25 сообщений из 43, страница 1 из 2
Теги для каталога - как лучше спроектировать?
    #38901467
morgot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такой вопрос - есть база каталога, вида id, название, описание. Нужно добавить теги. Т.е. чтобы каждая запись имела какие-то метки.
Вопрос - как лучше это сделать, исходя из:
1. Тегов на каждую запись будет не больше 10, но в целом - сотни.
2. По тегам будет идти поиск (выборка по тегу).

Т.е. какой тип данных mysql взять? Я думал 2 варианта - либо enum/set, либо varchar.
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38901517
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
morgotТакой вопрос - есть база каталога, вида id, название, описание. Нужно добавить теги. Т.е. чтобы каждая запись имела какие-то метки.
Вопрос - как лучше это сделать, исходя из:
1. Тегов на каждую запись будет не больше 10, но в целом - сотни.
2. По тегам будет идти поиск (выборка по тегу).

Т.е. какой тип данных mysql взять? Я думал 2 варианта - либо enum/set, либо varchar.


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
create table cat_tag
(
cat_id int not null,
tag varchar(255) not null,

constraint pk_cat_tag primary key( cat_id, tag ),
constraint un_cat_tag unique( tag, cat_id ),
constraint fk_cat_IN_cat_tag foreign key (cat_id) reference (cat)
);
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38901531
morgot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv, спасибо.
перечитав Ваш коммент я понял, что ничего не знаю о MySQL. Первый раз слышу о constraint.
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38901537
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Связь id-tag имеет тип много-ко-много. Так что делайте по науке - таблица элементов каталога, таблица тегов, таблица соответствия элемент-тег.
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38902046
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaСвязь id-tag имеет тип много-ко-много. Так что делайте по науке - таблица элементов каталога, таблица тегов, таблица соответствия элемент-тег.

табличка тегов не нужна, если нет дополнительных атрибутов у тега.
тег - самоопределяемое понятие.
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38902125
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivтег - самоопределяемое понятие.
То есть тег - сущность. Тогда как можно заявлять, что
MasterZivтабличка тегов не нужна
?
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38902332
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaMasterZivтег - самоопределяемое понятие.
То есть тег - сущность. Тогда как можно заявлять, что
MasterZivтабличка тегов не нужна
?

Тег -- это слово.
Оно является самоидентифицируемым.
Для него не нужно создавать суррогатный ключ.
Если у тега нет дополнительных атрибутов, типа, скажем, языка, какой-то доп. статистики и прочего, то доп. таблицу
делать не нужно, но это зависит от постановки задачи.

Так понятно ?
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38902344
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не спорьте, оба варианта имеют право на жизнь.
Выбор зависит от задач и от объемов данных.
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38902584
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivТег -- это слово.
Оно является самоидентифицируемым.
Для него не нужно создавать суррогатный ключ.
Если у тега нет дополнительных атрибутов, типа, скажем, языка, какой-то доп. статистики и прочего, то доп. таблицу
делать не нужно, но это зависит от постановки задачи.

Так понятно ?
Нет.

Суррогатный ключ существует не для того, чтобы идентифицировать запись, а для того, чтобы организовывать связывание по быстро обрабатываемым чисельным типам, а не по строковым.
А дополнительная таблица нужна для нормализации данных. Кроме того, это уменьшит суммарный объём данных и частично предохранит от ошибок ввода.
Дополнительная таблица НЕ нужна только в одном случае - если одному элементу каталога соответствует не более одного тега. Но и в этом случае отдельная таблица тегов всё-таки предпочтительнее.
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38902587
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А без таблицы тегов - как ты предлагаешь хранить НЕСКОЛЬКО тегов для одной записи в таблице элементов каталога? CSV? Так это выстрел в ногу - по ним же поди поиск будет...
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38902700
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Суррогатный ключ существует не для того, чтобы идентифицировать запись, а для того, чтобы организовывать связывание по быстро обрабатываемым чисельным типам, а не по строковым.



наивный....


А дополнительная таблица нужна для нормализации данных.

ок, пусть ТС решает, ему виднее.
Я в конце концов не утверждаю, что доп. таблица не нужна, я говорю, что возможно не нужна.




Дополнительная таблица НЕ нужна только в одном случае - если одному элементу каталога соответствует не более одного тега.


я не о той таблице, я о еще одной, о словаре всех тегов, а не о связи тэг-каталог.
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38902718
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivя не о той таблице, я о еще одной, о словаре всех тегов, а не о связи тэг-каталог.То есть ты ратуешь за одну дополнительную таблицу (тег - ИД_элемента_каталога), так, что ли?
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38902844
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaMasterZivя не о той таблице, я о еще одной, о словаре всех тегов, а не о связи тэг-каталог.То есть ты ратуешь за одну дополнительную таблицу (тег - ИД_элемента_каталога), так, что ли?

ДА, я ж её в топике и написал.
ЕСЛИ нужны дополнительные атрибуты тегов, ТО нужен ещё и словарь тэгов.
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38902862
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага... а как будет выглядеть тогда поиск по тегам? особенно если будет условие типа "не менее 2 из отмеченных 5 тегов"... грустно будет, грустно - что LIKE-ами, что полнотекстом грустно.
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38902873
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaАга... а как будет выглядеть тогда поиск по тегам? особенно если будет условие типа "не менее 2 из отмеченных 5 тегов"... грустно будет, грустно - что LIKE-ами, что полнотекстом грустно.Да почему же LIKE-ами? У MasterZiv нигде не сказано, что все тэги в одной записи. Наоборот, судя по primary key( cat_id, tag ) предполагается по записи на тэг.
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38902929
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftДа почему же LIKE-ами? Хорошо, прямым сравнением... но всё равно сравнением СТРОК. Что будет медленнее и накладнее сравнения ID-ов.
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38902947
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaЧто будет медленнее и накладнее сравнения ID-ов.В схеме с двумя таблицами эти ID-ы тоже придется искать строковым сравнением, если на входе строки.
И если повторяемость тэгов низкая, то примерно тож на тож и выйдет.
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38902960
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftAkinaЧто будет медленнее и накладнее сравнения ID-ов.В схеме с двумя таблицами эти ID-ы тоже придется искать строковым сравнением, если на входе строки.Поиск в компактном словаре, где поле тегов уникально, и в таблице, где теги повторяются - немного разные вещи, не так ли? А если ещё они повторяются там с опечатками, так и вовсе туши свет.
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38902973
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaПоиск в компактном словаре, где поле тегов уникально, и в таблице, где теги повторяются - немного разные вещи, не так ли?Я же специально дал уточнение - "И если повторяемость тэгов низкая".
Если повторяемость тэгов очень высокая, конечно, вариант с двумя таблицами будет быстрее.

Впрочем этих "если" еще есть множество.
Процитирую сам себя:miksoftВыбор зависит от задач и от объемов данных.
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38902999
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
morgot1. Тегов на каждую запись будет не больше 10, но в целом - сотни.
2. По тегам будет идти поиск (выборка по тегу).
Знать бы ещё объём базы. Может, там тот каталог на десяток тысяч записей - а мы тут копья ломаем.
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38903286
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftAkinaЧто будет медленнее и накладнее сравнения ID-ов.В схеме с двумя таблицами эти ID-ы тоже придется искать строковым сравнением, если на входе строки.
И если повторяемость тэгов низкая, то примерно тож на тож и выйдет.

Нет. Словарь, даже с низкой повторяемостью (Зализняк - ваще повторов практически нет) обладает очень хорошей индексируемостью. Поиск уже не совсем "строковый", а в индексе. Что заметно шустрее (в разы). :)

Только таблица связи (Master Ziv) - решение кривое "по определению": нарушение НФ в виде повторов в поле тегов для разных категорий, что ухудшает селективность индекса по полю - чуть более чем "гарантированно".

Ну и вопрос дальнейшей "живучести" схемы. Как только понадобится (а мало ли!) вводить описания к тегам ... так всё - пиши "труба": таки придется создавать словарь тегов...
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38903320
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109Нет. Словарь, даже с низкой повторяемостью (Зализняк - ваще повторов практически нет) обладает очень хорошей индексируемостью. Поиск уже не совсем "строковый", а в индексе.Не совсем понял, что именно "нет" ?
Что поиск будет с использованием индекса - предполагалось само собой, решений с фулсканом вроде бы никто не предлагал.
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38903326
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109Поиск уже не совсем "строковый", а в индексе. Что заметно шустрее (в разы). :)От того, что он в индексе, а не в данных, он не перестал быть строковым. И всё равно поиск по чисельному индексу ещё шустрее.
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38903328
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftAkinaАга... а как будет выглядеть тогда поиск по тегам? особенно если будет условие типа "не менее 2 из отмеченных 5 тегов"... грустно будет, грустно - что LIKE-ами, что полнотекстом грустно.Да почему же LIKE-ами? У MasterZiv нигде не сказано, что все тэги в одной записи. Наоборот, судя по primary key( cat_id, tag ) предполагается по записи на тэг.

естественно. как вообще можно по другому подумать?
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38903330
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akinamiksoftпропущено...
В схеме с двумя таблицами эти ID-ы тоже придется искать строковым сравнением, если на входе строки.Поиск в компактном словаре, где поле тегов уникально, и в таблице, где теги повторяются - немного разные вещи, не так ли? А если ещё они повторяются там с опечатками, так и вовсе туши свет.

еще раз, ты довольно наивен в понимании того, что ждет скорость поиска.
это индекс, а не тип данных под ним.
...
Рейтинг: 0 / 0
25 сообщений из 43, страница 1 из 2
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Теги для каталога - как лучше спроектировать?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]