Модель данных для продуктов с атрибутами, с разными ценами для каждой комбинации атрибутов - PullRequest
0 голосов
/ 01 января 2019

Я разрабатываю универсальное решение для электронной коммерции с использованием реляционной базы данных (MySQL) и хочу управлять такими продуктами:

  • Каждый продукт (например, дерево , пластик , сталь ) будет иметь несколько атрибутов (например, толщина , ширина , высота , цвет ).
  • В свою очередь, каждый атрибут может иметь несколько значений (например, 3мм или 5 мм для толщины, синий или красный для цвета и т. д.), , которые имеют разные цены в каждом случае .

Пока все хорошо, мой текущий подход рассчитан на 4 таблицы:

  • продукты ( id , name, desc)
  • атрибуты ( id , имя, имя, тип)
  • attribute_values ​​( id , attribute_id , значение)
  • attribute_product ( attribute_id , product_id , цена)

С этим адресомТаким образом, я могу хорошо комбинировать продукты и атрибуты, например:

  • Определить продукт с именем wood, который имеет 2 атрибутов (thicknessи height), которые, в свою очередь, имеют опции 3 mm и 5 mm для толщины и blue и red опции для цвета ...

Проблема возникает с ценой расчет потому что если я объявлю цену в attribute_product сводной таблице, я все еще не знаю, какое значение выбрано для этого конкретного атрибута и продукта.

Как я могу изменить модель данных, чтобы можно было каким-то образом ' связать ' товары со значениями атрибутов?Заранее спасибо.

1 Ответ

0 голосов
/ 01 января 2019

Правильно, таблица ссылок, такая как attribute_product, связывает только 1 экземпляр с 1 экземпляром, и ваши продукты могут иметь несколько атрибутов, поэтому модель не работает.

То, что вы называете attribute_product, - это то, что большинство людейсказал бы продукт.Это вещь, которая имеет цену.Поэтому я бы назвал это «продуктами».Возможно, то, что вы называете продуктами, это product_categories.

Таким образом, таблицы атрибутов будут для него дочерними таблицами.

  • product_categories (id, desc) - например."Дерево"
  • продуктов (id, name, desc, category_id, price) - например.«Дерево: 3x5 мм красный»
  • атрибуты (id, name, desc, type) - например.«толщина»
  • product_attributes (id, product_id, attribute_id, value) - несколько строк для продукта;например."3мм" "красный"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...