|
|
|
Теги для каталога - как лучше спроектировать?
|
|||
|---|---|---|---|
|
#18+
Такой вопрос - есть база каталога, вида id, название, описание. Нужно добавить теги. Т.е. чтобы каждая запись имела какие-то метки. Вопрос - как лучше это сделать, исходя из: 1. Тегов на каждую запись будет не больше 10, но в целом - сотни. 2. По тегам будет идти поиск (выборка по тегу). Т.е. какой тип данных mysql взять? Я думал 2 варианта - либо enum/set, либо varchar. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2015, 15:16:45 |
|
||
|
Теги для каталога - как лучше спроектировать?
|
|||
|---|---|---|---|
|
#18+
morgotТакой вопрос - есть база каталога, вида id, название, описание. Нужно добавить теги. Т.е. чтобы каждая запись имела какие-то метки. Вопрос - как лучше это сделать, исходя из: 1. Тегов на каждую запись будет не больше 10, но в целом - сотни. 2. По тегам будет идти поиск (выборка по тегу). Т.е. какой тип данных mysql взять? Я думал 2 варианта - либо enum/set, либо varchar. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2015, 15:55:21 |
|
||
|
Теги для каталога - как лучше спроектировать?
|
|||
|---|---|---|---|
|
#18+
MasterZiv, спасибо. перечитав Ваш коммент я понял, что ничего не знаю о MySQL. Первый раз слышу о constraint. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2015, 16:05:33 |
|
||
|
Теги для каталога - как лучше спроектировать?
|
|||
|---|---|---|---|
|
#18+
Связь id-tag имеет тип много-ко-много. Так что делайте по науке - таблица элементов каталога, таблица тегов, таблица соответствия элемент-тег. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2015, 16:10:11 |
|
||
|
Теги для каталога - как лучше спроектировать?
|
|||
|---|---|---|---|
|
#18+
AkinaСвязь id-tag имеет тип много-ко-много. Так что делайте по науке - таблица элементов каталога, таблица тегов, таблица соответствия элемент-тег. табличка тегов не нужна, если нет дополнительных атрибутов у тега. тег - самоопределяемое понятие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2015, 09:16:51 |
|
||
|
Теги для каталога - как лучше спроектировать?
|
|||
|---|---|---|---|
|
#18+
MasterZivтег - самоопределяемое понятие. То есть тег - сущность. Тогда как можно заявлять, что MasterZivтабличка тегов не нужна ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2015, 10:34:52 |
|
||
|
Теги для каталога - как лучше спроектировать?
|
|||
|---|---|---|---|
|
#18+
AkinaMasterZivтег - самоопределяемое понятие. То есть тег - сущность. Тогда как можно заявлять, что MasterZivтабличка тегов не нужна ? Тег -- это слово. Оно является самоидентифицируемым. Для него не нужно создавать суррогатный ключ. Если у тега нет дополнительных атрибутов, типа, скажем, языка, какой-то доп. статистики и прочего, то доп. таблицу делать не нужно, но это зависит от постановки задачи. Так понятно ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2015, 12:57:27 |
|
||
|
Теги для каталога - как лучше спроектировать?
|
|||
|---|---|---|---|
|
#18+
Не спорьте, оба варианта имеют право на жизнь. Выбор зависит от задач и от объемов данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2015, 13:06:21 |
|
||
|
Теги для каталога - как лучше спроектировать?
|
|||
|---|---|---|---|
|
#18+
MasterZivТег -- это слово. Оно является самоидентифицируемым. Для него не нужно создавать суррогатный ключ. Если у тега нет дополнительных атрибутов, типа, скажем, языка, какой-то доп. статистики и прочего, то доп. таблицу делать не нужно, но это зависит от постановки задачи. Так понятно ? Нет. Суррогатный ключ существует не для того, чтобы идентифицировать запись, а для того, чтобы организовывать связывание по быстро обрабатываемым чисельным типам, а не по строковым. А дополнительная таблица нужна для нормализации данных. Кроме того, это уменьшит суммарный объём данных и частично предохранит от ошибок ввода. Дополнительная таблица НЕ нужна только в одном случае - если одному элементу каталога соответствует не более одного тега. Но и в этом случае отдельная таблица тегов всё-таки предпочтительнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2015, 15:26:12 |
|
||
|
Теги для каталога - как лучше спроектировать?
|
|||
|---|---|---|---|
|
#18+
А без таблицы тегов - как ты предлагаешь хранить НЕСКОЛЬКО тегов для одной записи в таблице элементов каталога? CSV? Так это выстрел в ногу - по ним же поди поиск будет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2015, 15:27:30 |
|
||
|
Теги для каталога - как лучше спроектировать?
|
|||
|---|---|---|---|
|
#18+
Суррогатный ключ существует не для того, чтобы идентифицировать запись, а для того, чтобы организовывать связывание по быстро обрабатываемым чисельным типам, а не по строковым. наивный.... А дополнительная таблица нужна для нормализации данных. ок, пусть ТС решает, ему виднее. Я в конце концов не утверждаю, что доп. таблица не нужна, я говорю, что возможно не нужна. Дополнительная таблица НЕ нужна только в одном случае - если одному элементу каталога соответствует не более одного тега. я не о той таблице, я о еще одной, о словаре всех тегов, а не о связи тэг-каталог. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2015, 16:21:13 |
|
||
|
Теги для каталога - как лучше спроектировать?
|
|||
|---|---|---|---|
|
#18+
MasterZivя не о той таблице, я о еще одной, о словаре всех тегов, а не о связи тэг-каталог.То есть ты ратуешь за одну дополнительную таблицу (тег - ИД_элемента_каталога), так, что ли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2015, 16:32:18 |
|
||
|
Теги для каталога - как лучше спроектировать?
|
|||
|---|---|---|---|
|
#18+
AkinaMasterZivя не о той таблице, я о еще одной, о словаре всех тегов, а не о связи тэг-каталог.То есть ты ратуешь за одну дополнительную таблицу (тег - ИД_элемента_каталога), так, что ли? ДА, я ж её в топике и написал. ЕСЛИ нужны дополнительные атрибуты тегов, ТО нужен ещё и словарь тэгов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2015, 17:20:47 |
|
||
|
Теги для каталога - как лучше спроектировать?
|
|||
|---|---|---|---|
|
#18+
Ага... а как будет выглядеть тогда поиск по тегам? особенно если будет условие типа "не менее 2 из отмеченных 5 тегов"... грустно будет, грустно - что LIKE-ами, что полнотекстом грустно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2015, 17:30:32 |
|
||
|
Теги для каталога - как лучше спроектировать?
|
|||
|---|---|---|---|
|
#18+
AkinaАга... а как будет выглядеть тогда поиск по тегам? особенно если будет условие типа "не менее 2 из отмеченных 5 тегов"... грустно будет, грустно - что LIKE-ами, что полнотекстом грустно.Да почему же LIKE-ами? У MasterZiv нигде не сказано, что все тэги в одной записи. Наоборот, судя по primary key( cat_id, tag ) предполагается по записи на тэг. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2015, 17:33:06 |
|
||
|
Теги для каталога - как лучше спроектировать?
|
|||
|---|---|---|---|
|
#18+
miksoftДа почему же LIKE-ами? Хорошо, прямым сравнением... но всё равно сравнением СТРОК. Что будет медленнее и накладнее сравнения ID-ов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2015, 18:08:50 |
|
||
|
Теги для каталога - как лучше спроектировать?
|
|||
|---|---|---|---|
|
#18+
AkinaЧто будет медленнее и накладнее сравнения ID-ов.В схеме с двумя таблицами эти ID-ы тоже придется искать строковым сравнением, если на входе строки. И если повторяемость тэгов низкая, то примерно тож на тож и выйдет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2015, 18:31:59 |
|
||
|
Теги для каталога - как лучше спроектировать?
|
|||
|---|---|---|---|
|
#18+
miksoftAkinaЧто будет медленнее и накладнее сравнения ID-ов.В схеме с двумя таблицами эти ID-ы тоже придется искать строковым сравнением, если на входе строки.Поиск в компактном словаре, где поле тегов уникально, и в таблице, где теги повторяются - немного разные вещи, не так ли? А если ещё они повторяются там с опечатками, так и вовсе туши свет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2015, 18:38:52 |
|
||
|
Теги для каталога - как лучше спроектировать?
|
|||
|---|---|---|---|
|
#18+
AkinaПоиск в компактном словаре, где поле тегов уникально, и в таблице, где теги повторяются - немного разные вещи, не так ли?Я же специально дал уточнение - "И если повторяемость тэгов низкая". Если повторяемость тэгов очень высокая, конечно, вариант с двумя таблицами будет быстрее. Впрочем этих "если" еще есть множество. Процитирую сам себя:miksoftВыбор зависит от задач и от объемов данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2015, 18:43:10 |
|
||
|
Теги для каталога - как лучше спроектировать?
|
|||
|---|---|---|---|
|
#18+
morgot1. Тегов на каждую запись будет не больше 10, но в целом - сотни. 2. По тегам будет идти поиск (выборка по тегу). Знать бы ещё объём базы. Может, там тот каталог на десяток тысяч записей - а мы тут копья ломаем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2015, 19:04:17 |
|
||
|
Теги для каталога - как лучше спроектировать?
|
|||
|---|---|---|---|
|
#18+
miksoftAkinaЧто будет медленнее и накладнее сравнения ID-ов.В схеме с двумя таблицами эти ID-ы тоже придется искать строковым сравнением, если на входе строки. И если повторяемость тэгов низкая, то примерно тож на тож и выйдет. Нет. Словарь, даже с низкой повторяемостью (Зализняк - ваще повторов практически нет) обладает очень хорошей индексируемостью. Поиск уже не совсем "строковый", а в индексе. Что заметно шустрее (в разы). :) Только таблица связи (Master Ziv) - решение кривое "по определению": нарушение НФ в виде повторов в поле тегов для разных категорий, что ухудшает селективность индекса по полю - чуть более чем "гарантированно". Ну и вопрос дальнейшей "живучести" схемы. Как только понадобится (а мало ли!) вводить описания к тегам ... так всё - пиши "труба": таки придется создавать словарь тегов... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2015, 07:58:09 |
|
||
|
Теги для каталога - как лучше спроектировать?
|
|||
|---|---|---|---|
|
#18+
Arhat109Нет. Словарь, даже с низкой повторяемостью (Зализняк - ваще повторов практически нет) обладает очень хорошей индексируемостью. Поиск уже не совсем "строковый", а в индексе.Не совсем понял, что именно "нет" ? Что поиск будет с использованием индекса - предполагалось само собой, решений с фулсканом вроде бы никто не предлагал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2015, 08:55:13 |
|
||
|
Теги для каталога - как лучше спроектировать?
|
|||
|---|---|---|---|
|
#18+
Arhat109Поиск уже не совсем "строковый", а в индексе. Что заметно шустрее (в разы). :)От того, что он в индексе, а не в данных, он не перестал быть строковым. И всё равно поиск по чисельному индексу ещё шустрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2015, 09:01:45 |
|
||
|
Теги для каталога - как лучше спроектировать?
|
|||
|---|---|---|---|
|
#18+
miksoftAkinaАга... а как будет выглядеть тогда поиск по тегам? особенно если будет условие типа "не менее 2 из отмеченных 5 тегов"... грустно будет, грустно - что LIKE-ами, что полнотекстом грустно.Да почему же LIKE-ами? У MasterZiv нигде не сказано, что все тэги в одной записи. Наоборот, судя по primary key( cat_id, tag ) предполагается по записи на тэг. естественно. как вообще можно по другому подумать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2015, 09:03:05 |
|
||
|
Теги для каталога - как лучше спроектировать?
|
|||
|---|---|---|---|
|
#18+
Akinamiksoftпропущено... В схеме с двумя таблицами эти ID-ы тоже придется искать строковым сравнением, если на входе строки.Поиск в компактном словаре, где поле тегов уникально, и в таблице, где теги повторяются - немного разные вещи, не так ли? А если ещё они повторяются там с опечатками, так и вовсе туши свет. еще раз, ты довольно наивен в понимании того, что ждет скорость поиска. это индекс, а не тип данных под ним. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2015, 09:05:42 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38902587&tid=1833427]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
42ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 197ms |
| total: | 333ms |

| 0 / 0 |
