вопросы по дизайну БД (как работать с группами товаров) - PullRequest
2 голосов
/ 28 октября 2010

Буду признателен, если кто-нибудь поможет мне найти элегантное решение этой проблемы проектирования базы данных. Есть компания с большим количеством различных продуктов (P1, P2, P3, P4) и большим количеством клиентов (C1, C2, C3, C4). Теперь у них есть простая таблица базы данных для обработки заказов, что-то вроде 20101027 C2 P1 Кол-во 20101028 C1 P2 Кол-во

Теперь я хотел бы создать группы продуктов (например, (P1 + P3 + p4) и (P2 + P3)), которые можно было бы купить вместе по сниженной цене. Каков наилучший способ представления таких групп в системе баз данных? Работа с этими группами как с отдельными продуктами не работает, потому что мне нужна функциональность замены, добавления или удаления продуктов из групп. Поэтому мне нужно сохранить текущую таблицу продуктов.

Спасибо за чтение. Я надеюсь, что я получу некоторую помощь.

Ответы [ 3 ]

4 голосов
/ 28 октября 2010

Добавить новую таблицу product_group_promotions, с идентификатором, именем и скидкой. Затем создайте таблицу product_group_promotions_products, которая связывает товары с рекламными акциями в группе товаров. Он будет содержать идентификатор группы продуктов и идентификатор продукта. Таким образом, вы можете поместить один продукт в несколько групп и разрешить группам содержать несколько продуктов (конечно).

2 голосов
/ 28 октября 2010

Ян отвечает правильно, но не полностью.

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

Цена со скидкой может быть недостаточно.Вы также должны будете получить бизнес-правила от деловых людей относительно того, как применить скидку.Это может быть процент или бесплатный товар или фиксированная сумма.Если в процентах вы распределяете скидку равномерно, пропорционально, на самый дешевый продукт, самый дорогой?Если бесплатный предмет, который в наборе бесплатный.Это также может быть фиксированная сумма, 10 долларов, если вы покупаете x, y и z.Скидка применяется более одного раза.Если кто-то покупает 5x P2 и P3, они получают скидку на всех или только на первые.Есть ли ограничение в течение определенного периода времени.Как и в предыдущем примере, если вы не дадите мне скидку на все 5, я бы просто заполнил 5 заказов по 1 и получил скидку, которую вы пытались предотвратить.Если это так, вам придется вернуться к предыдущей покупке этого клиента, чтобы увидеть, получили ли они эту скидку.

Вы можете видеть, как это может быть безобразно.Я хотел бы уточнить с компанией ТОЧНО, для чего они планируют использовать эту новую функцию и провести с ними эти сценарии использования.

Как Q спросил, достаточно ли велика корзина приобретенных товаров, может быть больше, чемвозможна одна скидка.Нужно ли вам определять, что отдать, вы представляете список вариантов обратно в пользовательский интерфейс ... и пересчитываете.

Вот почему я помилую универмаги, которые все испортили.Это не просто.

1 голос
/ 31 октября 2010

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

"Работа с этими группами как с отдельными продуктами не работает, потому что мне нужны функциональные возможности замены, добавления или удаления продуктов из групп."

Вот несколько вещей, на которые нужно обратить внимание:

  1. Текущий инвентарь против прошлых заказов
  2. Как вы справляетесь с изменениями цен на P1, P2, P3
  3. Как вы справляетесь с добавлением нового товара или товаров в существующую группу
  4. Как вы справляетесь с удалением товара или товаров из существующей группы

На мой взгляд, вам нужнодва набора таблиц.

  • Таблицы, из которых состоит ваш текущий инвентарь
  • Таблицы, в которых записывается, что клиенты приобрели (таблицы исторических данных)

Если вам нужноЧтобы реконструировать покупку клиентов за шесть месяцев назад, вы не можете полагаться на текущие данные, учитывая тот факт, что группировка сегодня может выглядеть не так, как шесть месяцев назад.Поэтому, если у вас еще нет набора таблиц исторических данных для записей о клиентах, я рекомендую вам их создать.

С набором таблиц исторических данных, в которых хранится то, что было куплено клиентом, вы можете в значительной степениделать то, что вы хотите, чтобы текущие данные инвентаризации.Изменить цены, перегруппировать продукты, сделать продукты устаревшими, временно приостановить продукт и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...