как моделировать скидку на товары в базе данных?

Я создаю сайт электронной коммерции и хотел бы предложить скидки на определенные предметы в течение ограниченного времени.

моя таблица продуктов (MySQL) выглядит так:

Product
    - productId
    - Name
    - Weight
    - Price (price as on the cover of the item)

должен ли я сделать другую таблицу для сделок:

Deals
 - dealID
 - productID (Foreign Key)
 - discount (fractional value: percentage)
 - description

для получения предметов:

  • q1: найти все продукты в продуктах с productID = все продукты в таблице сделок
  • q2: обновите цену со скидкой из таблицы сделок
  • q3: верните все продукты

есть ли лучший способ сделать это ? Кроме того, как я могу обрабатывать случай сделки, существующей только в течение ограниченного времени ?

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

я опубликовал продолжение решения, предложенного crontab здесь

4 ответов


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

код Deals стол не нужен dealID - он может быть настроен с помощью productID и дата начала скидки. Кроме того, в зависимости от того, насколько высока цена может быть для данного элемента, не забудьте сделать свой discount поле что-то достаточно точное (чем-то как DECIMAL 12,8).

если бы это был я, я бы действительно оставил Прайса С на Product таблица и создать ProductPricing таблица вместо создания Deals таблица. Это ProductPricing таблица будет состоять из productID и начальная метка времени в качестве ключевых полей, а затем также конечная метка времени, чтобы указать, когда эта цена изменилась. И, конечно, цена предмета.


еще одна вещь, которую следует учитывать, - как вы моделируете ситуацию, когда нет скидки на данный товар? Вы можете использовать Null Объект шаблон здесь-в основном, когда продукт создается, вы также добавляете сделку на этот продукт со скидкой 0% и неограниченным временем. Таким образом, вы можете упростить логику поиска продукта (нет внешних соединений в запросе, нет if для расчета цен).


Я бы использовал десятичное число для столбца скидки.

цена * скидка = $ сумма выкл

цена - $ amount off = цена в корзине

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


Я бы добавил discountPrice, discountPercentage, столбец endDiscountDate в таблицу Product и создать таблицу истории скидок, чтобы отслеживать скидки

затем при выборе нет необходимости присоединяться к таблице вы можете выбрать правильную цену проверив endDiscountDate