|
|
|
Теги для каталога - как лучше спроектировать?
|
|||
|---|---|---|---|
|
#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 |
|
||
|
Теги для каталога - как лучше спроектировать?
|
|||
|---|---|---|---|
|
#18+
Только таблица связи (Master Ziv) - решение кривое "по определению": нарушение НФ в виде повторов в поле тегов для разных категорий, что ухудшает селективность индекса по полю - чуть более чем "гарантированно". и гдеж там нарушение НФ-то? Я как бы лет 15 уже базы данных проектную, ни разу ничего с нарушением НФ не делал. Ну и вопрос дальнейшей "живучести" схемы. Как только понадобится (а мало ли!) вводить описания к тегам ... так всё - пиши "труба": таки придется создавать словарь тегов... ну, так надо решать топик стартеру, и думать, что ему нужно. я опять-таки писал об этом с самого начала в каждом посте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2015, 09:11:13 |
|
||
|
Теги для каталога - как лучше спроектировать?
|
|||
|---|---|---|---|
|
#18+
MasterZiv , опишите, пожалуйста, как в ВАШЕЙ схеме устанавливать соответствие, фильтровать и получать статистику, если оператор набрал название тега с опечаткой, и это не было выявлено на стадии ввода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2015, 11:28:24 |
|
||
|
Теги для каталога - как лучше спроектировать?
|
|||
|---|---|---|---|
|
#18+
MasterZiv, Вроде автор сразу отписался что ему нужны к каждой категории тегИ, то бишь больше одного на категорию. И нигде не сказано, что они уникальны для каждой категории. То бишь "повтор" тегов в табличке связи (ежели она одна) - практически гарантирован. Это уже есть нарушение НФ ... 1-й? Не помню. :) И оно же (повтор тегов) - снижает селективность индекса. А по практике (своей), могу сказать что часто теги к товарам И категориям настолько НЕ уникальны ... что просто без словаря - туго. Но ... это моя практика, а что там у ТС-а - только он знает. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2015, 11:31:11 |
|
||
|
Теги для каталога - как лучше спроектировать?
|
|||
|---|---|---|---|
|
#18+
вы что тут все с утра посходили что ли? весна действует? все ж просто... ладно, добавить до компа - отпишу все подробно, до последней детальки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2015, 11:39:48 |
|
||
|
Теги для каталога - как лучше спроектировать?
|
|||
|---|---|---|---|
|
#18+
MasterZivвы что тут все с утра посходили что ли? весна действует? все ж просто... ладно, добавить до компа - отпишу все подробно, до последней детальки. у вас в корне все неверно! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2015, 02:08:18 |
|
||
|
Теги для каталога - как лучше спроектировать?
|
|||
|---|---|---|---|
|
#18+
wamacoMasterZivвы что тут все с утра посходили что ли? весна действует? все ж просто... ладно, добавить до компа - отпишу все подробно, до последней детальки. у вас в корне все неверно!сказал как отрезал типа, ошибка настолько очевидна, что её даже объяснять никому не надо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2015, 06:35:28 |
|
||
|
Теги для каталога - как лучше спроектировать?
|
|||
|---|---|---|---|
|
#18+
MasterZiv, кто-то обещался отписаться "как только" ... и? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2015, 10:39:24 |
|
||
|
Теги для каталога - как лучше спроектировать?
|
|||
|---|---|---|---|
|
#18+
Arhat109, Что-то некогда... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2015, 12:29:18 |
|
||
|
Теги для каталога - как лучше спроектировать?
|
|||
|---|---|---|---|
|
#18+
Arhat109, Вот типа того. (процедуры написаны на умозрительном вымышленном языке, сметь PL/SQL и TransactSQL, я MySQL наизусть не помню). Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2015, 12:44:25 |
|
||
|
Теги для каталога - как лучше спроектировать?
|
|||
|---|---|---|---|
|
#18+
Неясно, на что это ссылается внешний ключ Код: sql 1. Нет такой буквы в представленных DDL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2015, 12:54:30 |
|
||
|
Теги для каталога - как лучше спроектировать?
|
|||
|---|---|---|---|
|
#18+
AkinaНеясно, на что это ссылается внешний ключ Код: sql 1. Нет такой буквы в представленных DDL. да, сори, просто скопировал старый КПД, а потом таблицу переназвал по-другому. должно быть reference (catalogue) модератор, исправьте пожалуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2015, 13:52:20 |
|
||
|
Теги для каталога - как лучше спроектировать?
|
|||
|---|---|---|---|
|
#18+
MasterZivмодератор, исправьте пожалуйста.поправил ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2015, 14:02:06 |
|
||
|
Теги для каталога - как лучше спроектировать?
|
|||
|---|---|---|---|
|
#18+
Ну и на что ТЕПЕРЬ референс? на имя таблицы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2015, 14:06:02 |
|
||
|
Теги для каталога - как лучше спроектировать?
|
|||
|---|---|---|---|
|
#18+
AkinaНу и на что ТЕПЕРЬ референс? на имя таблицы? да ладно тебе, на pk таблицы, уж можно же догадаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2015, 14:12:50 |
|
||
|
Теги для каталога - как лучше спроектировать?
|
|||
|---|---|---|---|
|
#18+
AkinaНу и на что ТЕПЕРЬ референс? на имя таблицы? references catalogue ( cat_id ); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2015, 14:17:40 |
|
||
|
Теги для каталога - как лучше спроектировать?
|
|||
|---|---|---|---|
|
#18+
Ага... А теперь хочется получить ответ на вопрос . На ЭТОЙ структуре. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2015, 14:19:49 |
|
||
|
Теги для каталога - как лучше спроектировать?
|
|||
|---|---|---|---|
|
#18+
Akina MasterZiv , опишите, пожалуйста, как в ВАШЕЙ схеме устанавливать соответствие, фильтровать и получать статистику, если оператор набрал название тега с опечаткой, и это не было выявлено на стадии ввода. Это зависит от постановки. Надо ли вообще это делать. В примитивном случае -- вообще никак. И я бы так и делал, потому что тег -- это не обязательно слово какого-то языка, и в общем случае его невозможно верифицировать, правильный он или нет. При поиске запрос просто ничего не выдаст при неправильном теге, а при вставке будет создан новый тег и данные будут помечены им. В случае, если множество тегов фиксированное, то нужно, естественно, хранить справочник тегов и не добавлять в него тег, как у меня в процедуре, а проверять его наличие в справочнике. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2015, 14:55:08 |
|
||
|
Теги для каталога - как лучше спроектировать?
|
|||
|---|---|---|---|
|
#18+
MasterZiv, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. А разве не проще вот такой запрос: Код: sql 1. 2. 3. 4. 5. @tags -- строки тегов через запятую ... лучше прямо с клиента... @tags_count -- количество искомых тегов. Не уверен за синтаксис и как сделать для процедуры, например с перенным числом параметров... но это один запрос, а не N-джойновый. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2015, 10:55:48 |
|
||
|
|

start [/forum/topic.php?all=1&fid=47&tid=1833427]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
57ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
81ms |
get tp. blocked users: |
1ms |
| others: | 226ms |
| total: | 405ms |

| 0 / 0 |
