@Qixing

Как правильно спроектировать параметры товаров для категорий в интернет-магазине?

Добрый день.
Интересует мнение и опыт по проектированию интернет-магазина.
Бриф:
Каждый товар принадлежит к определенной категории.
Следовательно у каждого товара есть свои особые атрибуты в зависимости от категорий.
Например:
Шины: ширина, высота, диаметр, сверловка.
Одежда: размер, цвет.
Каждый атрибут может быть выбран жестко из select.

Реализация:
1) Динамическая
Имеем две таблицы
item_category_property (id,category,name, values(сер. массив из значений для select/checkbox)
item_property_value (id, item_category_property, item, values
Плюс - легко сгенерировать из админки атрибуты для каждой категории.
Минусы - при больших объемах тупняки в выборках. Нельзя заточить интерфейс в административной части для более удобного использования

2) Статика
Одна таблица item_category_XX (Где xx - id категории). Будем хранить уже заранее определенные типы данных, что позволит нам удобное проектирование интерфейса и написание бизнес логики.
Минусы - при n-ом количестве категории для каждой категории неудобное создание таблицы ( придется на уровне БД самостоятельно руками)
Как хранить связи на программном уровне, чтобы делать JOIN?
Категория может быть дочерней, следовательно у родительской связи тоже есть параметры общие.

Есть ли какие-то универсальные варианты?
  • Вопрос задан
  • 2443 просмотра
Пригласить эксперта
Ответы на вопрос 1
zoonman
@zoonman
⋆⋆⋆⋆⋆
attribute_group [id, name, order]
attribute [id, group_id, name, order]
attribute_value [id, value]
product_attribute [product_id, attribute_id, attribute_value_id]


У разных товаров могут быть атрибуты объединенные в группы. Их можно сортировать по полю order.
При необходимости, вы можете создать связь между категориями и группами атрибутов.
category_attribute [category_id, group_id]
Не бойтесь, будут сложные запросы, но ввиду декомпозиции объем данных будет уменьшен.
Сложность запросов легко нивелируется кэшированием.
А до миллионов товаров в таблицах нужно еще дорасти.
Ответ написан
Ваш ответ на вопрос

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

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