@belyaevcyrill

Как правильно хранить параметры фильтрации в таблице товаров?

Есть некая таблица products, содержащая в себе всевозможные товары. Эти товары принадлежат к самым разным категориям — начиная от утюга, заканчивая аудио-сабвуферами.

Возник вопрос, как хранить эти все товары в одной таблице если у каждого товара свой набор фильтров? То есть, например, для категории "утюг" в таблице products должны быть поля "максимальная температура", "можно гладить шерсть" и т.д. А для категории "аудио-сабвуфер" в таблице products должны быть поля "выходная мощность", "материал корпуса колонок" и т.д...

Очевидно, что получается каша. Например, у товара категории "утюг" фигурирует ненужное поле "материал корпуса колонок" :-)

Как правильно хранить товары в реляционной БД? Например, Postgres? Неужели для каждой категории придётся заводить свой набор фильтров?

Можно ли, как вариант, в таблице products оставить только самые главные (общие для всех категорий) поля, а остальные хранить в поле filters в виде строки? Чтобы web-приложение "парсило" строку из этого поля.

Т.е., вид таблицы такой:
CREATE TABLE `products` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`category_id` INT(11),
	`name` VARCHAR(255),
	`type_id` INT(11),  -- Общий для всех фильтр "Тип"
	`vendor_id` INT(11),  -- Общий для всех фильтр "Производитель"
	`filters` VARCHAR(255),  -- Тут все специфические фильтры
)


P.S.: Менять СУБД не можем. Только PostgreSQL.
  • Вопрос задан
  • 451 просмотр
Решения вопроса 2
@gill-sama
Лучшим вариантом является создание 2ух раздельных таблиц - 1 для продукции, а 2 для признаков, а так же 1 таблица для их связывания хранящая id
table products (id serial, category_id small int, name text, vendor text)
table property(id serial,name text,  value)
table product_property(product_id big int, property_id big int)
Ответ написан
megafax
@megafax
web-программист
Тут не в типе СУБД речь, а скорей всего в понимании нормальной формы и прочего. Для примера можете хранить что то общее в products, список характеристик в params, а значения для каждого товара в products_params. Т.е. Вам нужно разделить соотношение многие-ко-многим на несколько таблиц.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы