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

时间:2011-12-20 13:54:45

标签: 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 =促销表中的所有产品ID
  • q2:使用促销表格中的折扣更新价格
  • q3:退回所有产品

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

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

我发布了crontab here

提出的解决方案的后续内容

4 个答案:

答案 0 :(得分:8)

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

您的Deals表格并不真正需要dealID - 可以使用productID和折扣的开始日期加以键入。此外,根据给定项目的价格有多高,请记住使discount字段足够精确(类似DECIMAL 12,8)。

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

答案 1 :(得分:3)

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

答案 2 :(得分:1)

我会在折扣列中使用小数。

价格*折扣= $ off off

价格 - $ off off =购物车价格

在有限的时间内,您可以输入到期日期列,并且只返回未过期的行。

答案 3 :(得分:0)

我会将discountPrice,discountPercentage,endDiscountDate列添加到表Product 并创建表格折扣历史记录以保持折扣跟踪

然后当选择不需要加入表时,您可以选择正确的价格 通过检查endDiscountDate