如何为数据库中的项目建模折扣?

bra*_*ter 10 mysql database-design entity-relationship

我正在建立一个电子商务网站,并希望在限定时间内提供某些商品的折扣.

我的产品表(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 =交易表中的所有productID查找产品中的所有产品
  • q2:从交易表中以折扣价更新价格
  • q3:退回所有产品

有一个更好的方法吗 ?另外,我如何仅在有限的时间内处理现有交易的情况?

编辑:我想显示我们为每个产品提供多少折扣.因此,我需要每个产品两个值,原始价格和给定持续时间的折扣价格.

我发布了后续由crontab中提出的解决方案在这里

Cro*_*tab 8

您可以考虑在Deals表中添加开始时间戳和结束时间戳.这样,您可以检查以确保当前日期在交易的开始日期和结束日期之间.

你的Deals表并不真正需要dealID- 它可以与productID折扣的起始日期相关联.此外,根据给定项目的价格有多高,请记住使您的discount字段足够精确(类似DECIMAL 12,8).

如果是我,我真的离开价格Product表,并创建一个ProductPricing表,而不是创建的Deals表.该ProductPricing表将包含productID和作为关键字段的起始时间戳,然后还有一个结束时间戳,以指示该价格何时发生变化.当然还有物品的价格.


soc*_*a23 5

另一件需要考虑的事情是,当给定商品没有折扣时,如何对情况进行建模?您可以在这里使用空对象模式 - 基本上,当创建产品时,您还可以为该产品添加 0% 折扣和无限时间的交易。这样,您可以简化产品检索逻辑(查询中没有外部联接,也没有if计算价格)。