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

Т.е. какой тип данных mysql взять? Я думал 2 варианта - либо enum/set, либо varchar.
...
Рейтинг: 0 / 0
11.03.2015, 15:55:21
    #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
11.03.2015, 16:05:33
    #38901531
morgot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Теги для каталога - как лучше спроектировать?
MasterZiv, спасибо.
перечитав Ваш коммент я понял, что ничего не знаю о MySQL. Первый раз слышу о constraint.
...
Рейтинг: 0 / 0
11.03.2015, 16:10:11
    #38901537
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Теги для каталога - как лучше спроектировать?
Связь id-tag имеет тип много-ко-много. Так что делайте по науке - таблица элементов каталога, таблица тегов, таблица соответствия элемент-тег.
...
Рейтинг: 0 / 0
12.03.2015, 09:16:51
    #38902046
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Теги для каталога - как лучше спроектировать?
AkinaСвязь id-tag имеет тип много-ко-много. Так что делайте по науке - таблица элементов каталога, таблица тегов, таблица соответствия элемент-тег.

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

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

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

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

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



наивный....


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

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




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


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

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

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

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

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

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

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

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


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