Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Архитектура таблицы товаров 
:(
    Опции темы
console
  Дата 20.1.2009, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 307
Регистрация: 12.2.2007
Где: Belarus::Minsk

Репутация: нет
Всего: 3



Для примера взят каталог товаров http://catalog.onliner.ru/
Здесь мы видим разбитые на категории товары. Если мы зайдем в категорию, например мобильных телефонов (http://catalog.onliner.ru/mobile/), то справа увидим панель поиска нужной модели телефона по определенным критериям. Собственно мой вопрос состоит в том, как реализовать подобную модель разделения товаров с последующей выборкой по необходимым кастомным признакам. Делать для каждого вида товаров (а у каждого вида товара свой набор признаков, по которым позже будет происходить поиск) отдельную таблицу мне не кажется разумным выходом из ситуации.


--------------------
user posted image
Nothing is impossible
My WeBlog
PM MAIL WWW ICQ   Вверх
console
Дата 20.1.2009, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 307
Регистрация: 12.2.2007
Где: Belarus::Minsk

Репутация: нет
Всего: 3



Какие еще есть предложения, кроме:
использовать отдельную таблицу критериев для товаров (связывается с товаром через parent_id) ?


--------------------
user posted image
Nothing is impossible
My WeBlog
PM MAIL WWW ICQ   Вверх
bars80080
Дата 20.1.2009, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 9
Всего: 315



Цитата(console @  20.1.2009,  13:06 Найти цитируемый пост)
Делать для каждого вида товаров (а у каждого вида товара свой набор признаков, по которым позже будет происходить поиск) отдельную таблицу мне не кажется разумным выходом из ситуации

так сделай общую таблицу для товаров, в которой создай чёткие поля общих широко распространённых признаков, как-то цена, габариты, вес, цвет, дата выпуска и т.д. а затем ряд полей с неопределёнными параметрами: param1, param2, param3. исходя из количества данных и типов параметров часть полей сделай int, часть varchar(n). остаётся добавить поле id_categor. и теперь при выборке просто указываем where id_categor=5 and ... далее список необходимых критериев именно для этого типа товаров
PM MAIL WWW   Вверх
console
Дата 20.1.2009, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 307
Регистрация: 12.2.2007
Где: Belarus::Minsk

Репутация: нет
Всего: 3



Цитата(bars80080 @ 20.1.2009,  13:58)
Цитата(console @  20.1.2009,  13:06 Найти цитируемый пост)
Делать для каждого вида товаров (а у каждого вида товара свой набор признаков, по которым позже будет происходить поиск) отдельную таблицу мне не кажется разумным выходом из ситуации

так сделай общую таблицу для товаров, в которой создай чёткие поля общих широко распространённых признаков, как-то цена, габариты, вес, цвет, дата выпуска и т.д. а затем ряд полей с неопределёнными параметрами: param1, param2, param3. исходя из количества данных и типов параметров часть полей сделай int, часть varchar(n). остаётся добавить поле id_categor. и теперь при выборке просто указываем where id_categor=5 and ... далее список необходимых критериев именно для этого типа товаров

Никак не пойдет представленный вами вариант. Товары спичка и машина несомненно имеют некоторые общие критерии, но я заранее не знаю сколько всего критериев будет, так что дополнительные поля глупая затея.


--------------------
user posted image
Nothing is impossible
My WeBlog
PM MAIL WWW ICQ   Вверх
bars80080
Дата 20.1.2009, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 9
Всего: 315



вы знаете лучше?

имхо, не вижу проблемы сочетания спички и машины. коли они присутствуют у вас в магазине, либо это очень широкопрофильный магазин, что приводит к мысли о малом количестве единиц в категории, а значит и бесполезности, допустим, указывать количество свечей зажигания, а раз так, то по таким частным параметрам вряд ли нужна сортировка, т.е. запихать их в один файл ТХ и всё. либо у вас что-то а-ля "из рук в руки", но там нет большого количества разных параметров. десяток, не больше
PM MAIL WWW   Вверх
console
Дата 20.1.2009, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 307
Регистрация: 12.2.2007
Где: Belarus::Minsk

Репутация: нет
Всего: 3



В начале топика писал, как будет. Нужен будет поиск в каждой категории товара по определенным критериям.

Добавлено через 3 минуты и 44 секунды
Просто у одного товара критериев может быть 5, а у другого 55. И вы думаете, что проектирование таблицы товаров с большим количеством доп полей (большинство из которых будет пустовать) является разумным решением?


--------------------
user posted image
Nothing is impossible
My WeBlog
PM MAIL WWW ICQ   Вверх
skyboy
Дата 20.1.2009, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



console, можно отдельно таблицу аттрибутов товаров: id_товара, id_аттрибута, значение. универсально и гибко. и громоздко. потому как поля бывают с произвольным значением(масса, к примеру), и со значением-жестко заданным списком("формфактор процессора"), и просто признак есть/нет(который удобнее отображать в виде чекбокса). значит, придется описывать эту логику в доптаблице "аттрибуты". и при формировании страницы усиленно join'ить таблицы друг с другом.
кроме того, на отдельное поле в одной таблице можно поставить индекс. в случае же использования доптаблицы индекс есть смысл ставить только на пару "id_аттрибута + значение", что не лучшим образом скажется на производительности.
с другой стороны, можно сделать кеш сгенерированных страниц с описанием(чтоб каждый раз заново не генерировать), кеш результатов поиска(очевидно, что по одним признакам ищут чаще, чем по другим) и произвести некоторую денормализацию таблицы(к примеру, значения самых частоискаемых аттрибутов вынести в дополнительное текстовое поле с перечислением значений через запятую и искать в первую очередь по этому полю). 
PM MAIL   Вверх
console
Дата 20.1.2009, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 307
Регистрация: 12.2.2007
Где: Belarus::Minsk

Репутация: нет
Всего: 3



Цитата(skyboy @ 20.1.2009,  14:55)
console, можно отдельно таблицу аттрибутов товаров: id_товара, id_аттрибута, значение. универсально и гибко. и громоздко. потому как поля бывают с произвольным значением(масса, к примеру), и со значением-жестко заданным списком("формфактор процессора"), и просто признак есть/нет(который удобнее отображать в виде чекбокса). значит, придется описывать эту логику в доптаблице "аттрибуты". и при формировании страницы усиленно join'ить таблицы друг с другом.
кроме того, на отдельное поле в одной таблице можно поставить индекс. в случае же использования доптаблицы индекс есть смысл ставить только на пару "id_аттрибута + значение", что не лучшим образом скажется на производительности.
с другой стороны, можно сделать кеш сгенерированных страниц с описанием(чтоб каждый раз заново не генерировать), кеш результатов поиска(очевидно, что по одним признакам ищут чаще, чем по другим) и произвести некоторую денормализацию таблицы(к примеру, значения самых частоискаемых аттрибутов вынести в дополнительное текстовое поле с перечислением значений через запятую и искать в первую очередь по этому полю).

Skyboy, спасибо за советы... будем думать


--------------------
user posted image
Nothing is impossible
My WeBlog
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.1017 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.