@maxyc_webber
Web-программист

Как правильно спроектировать БД?

Тема следующая:
Надо сделать базу данных, в которой будут сети магазинов, в этих сетях есть магазины. Магазины в конкретных городах. В СЕТЯХ (не в магазинах) есть товары, например, молоко. Но молоко может быть ОАО Залесский фермер или ОАО ЕЖК. В разных сетях товар разных вендоров стоит по разному. Помимо этого в одной сети в разных городах может стоить по разному товар...
Встал вопрос как правильно хранить цену в базе, так чтобы было не сложно вытаскивать ее потом запросами.
Усложняется все тем, что товар не товар. То есть товар нужно делать SKU. Поэтому цена будет зависеть от параметров товара. Я привел пример базы с конкретным товаром, и что то не могу продумать схему "товары с SKU"

Плюсом нужна история по датам
  • Вопрос задан
  • 1258 просмотров
Пригласить эксперта
Ответы на вопрос 7
@vladz
Вы ещё в постановку добавьте различного рода игры с ценами: акции, скидки, миксы... ну лояльность до кучи. Тему терминалов или точек продаж нужно тоже раскрыть, а то переделывать потом..
Ответ написан
Если я правильно понял, то SKU нужно формировать отдельной таблицей как композицию магазина, товара и цены. Товар в этой схеме тоже может быть композицией непосредственно товара и его свойств (вендор). Тут же рядом с SKU можно хранить и цену.

То есть, цена будет объединять товар (Items), магазин (stores), свойства товара (?). Получить цену в конкретном магазине - 1 джоин. Получить все цены одного товара - простой запрос по индексу.

Выложите MWB-проект, чтобы было проще.
Ответ написан
А как цена высчитывается?
Ответ написан
@heartdevil
плыву как воздушный шарик
Привет.

Сразу скажу, что у меня в этом мало опыта, но задача интересная, поэтому буду следить за этой веткой и выскажу просто пару соображений.

Мне кажется все равно основной единицей у вас должен быть товар, а не цена. А цена должна быть у типа товара.
Ответ написан
madmages
@madmages
Человек прямоходящий
Если вам нужна история цен по датам то пожалуй докиньте дату в первичный ключ(или уникальный) в таблице price. а если вам нужен SKU каждого товара то вместо item_id в prices можете использовать SKU, который в свою очередь будет ссылаться на нужный item_id
Ответ написан
Комментировать
MikeGav
@MikeGav
Web евангелист
А вам параметр сеть для чего-то конкретно нужен?
Если нет, то можно все представить точками продаж, у каждой точки продажи есть адресс, контакты, ну и свое юр. лицо владелец. А цена это всеголишь витрина, которая для каждой точки продажи своя. Вот только если у вас точки продажи несвязанные (у каждого магазина своя биза 1C с номенклатурой причем ID номенклатуры между магазинами не пересекаются), то и номенклатура должна быть у каждой своя. и еще молоко в точке продажи 1 <> молоко в точки продаже 2 потомучто срок годности другой или производитель итд.
Ответ написан
Комментировать
@3569291
Можно пойти от заведения Типов Цен. Есть товарная позиция - Молоко (оно и в Африке - Молоко), есть "опции" Молока, в данном случае: "Производитель", "Процент жирности" и тп.

Заводим "Тип цены" - "Базовый". который может просто рассчитываться из закупочной. Далее заводим другие типы цен (Точки, Сети, Филиалы, "Цены для магазина в Бобруйске" и т.п.) Важная характеристика Типа цены - правило расчета - динамическая или на основании другой цены + фиксированный процент (или любой другой алгоритм) - суть правила расчета - назначить/рассчитать цену по входящим данным, как то: Товар, его опции, точка сети и т.д.

Для каждого товара свой тип цены, в зависимости от опций и/или сетей - для товара (а с опциями - это уже SKU) назначается определенный/свой тип цены для его расчета.
Это вкратце)
ЗЫ думаю, важный момент иметь общую НСИ для всего ИТ поля. И даже если в каждом магазине своя база и "свой id номенклатуры" - необходимо внедрить общий реквизит для их синхронизации. Это касается и "типов цен" и "правил расчета цен"
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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