Как смоделировать скидку на товары в базе данных? - PullRequest
10 голосов
/ 20 декабря 2011

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

Таблица «Мой продукт» (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: вернуть все товары

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

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

Я разместил продолжение решения, предложенного crontab здесь

Ответы [ 4 ]

8 голосов
/ 20 декабря 2011

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

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

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

3 голосов
/ 20 декабря 2011

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

1 голос
/ 20 декабря 2011

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

цена * скидка = сумма от

цена - сумма от $ = цена в корзине

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

0 голосов
/ 11 ноября 2014

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

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

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