как моделировать скидку на товары в базе данных?
Я создаю сайт электронной коммерции и хотел бы предложить скидки на определенные предметы в течение ограниченного времени.
моя таблица продуктов (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