我正在建立一个电子商务网站,并希望在有限的时间内提供某些商品的折扣。我想显示我们为每种产品提供多少折扣。因此,对于给定的持续时间,我需要每个产品两个值,分别是原始价格和折扣价。
这是我要求的answer的question的后续措施
架构:
数据:
Product:
1 | Apple
2 | Banana
T1:2011年12月21日:目前无交易
ProductPricing
1 | Dec 20, 2011, 00:00 | Jan 1, 2038, 00:00 | 10$ | 10$
2 | Dec 20, 2011, 00:00 | Jan 1, 2038, 00:00 | 20$ | 20$
T2:2011年12月24日:特价!从12月25日14:00-12月26日14:00对苹果应用25%的折扣
方法A.
-查询更新给定期间的苹果价格
ProductPricing
1 | Dec 25, 2011, 14:00 | Dec 26, 2011, 14:00 | 7.5$| 10$
2 | Dec 20, 2011, 00:00 | Dec 25, 2038, 00:00 | 20$ | 20$
方法B.
-查询会添加给定持续时间内苹果价格的另一条记录
ProductPricing
1 | Dec 20, 2011, 00:00 | Jan 1, 2038, 00:00 | 10$ | 10$
2 | Dec 20, 2011, 00:00 | Dec 25, 2038, 00:00 | 20$ | 20$
1 | Dec 25, 2011, 14:00 | Dec 26, 2011, 14:00 | 7.5$| 10$
T3:2011年12月27日-选项
方法A.
目前交易已过期,是否应该使用触发器重置endTimeStamp?
方法B.
我应该删除交易刚刚到期的产品的最新记录吗?
最佳答案
ProductPricing
表的设计使我们不必删除旧的定价数据(有时管理层希望基于该数据生成报告)。使用上述内容,您将像这样开始(我更改了开始日期,因此很容易看出是的,这是系统安装时的原始价格):
ProductPricing
1 | Jan 1, 1970, 00:00:00 | Jan 1, 2038, 00:00:00 | 10$ | 10$
现在,假设您给苹果打折,并且您想积极主动并为销售结束建立系统:
ProductPricing
1 | Jan 1, 1970, 00:00:00 | Dec 20, 2011, 00:00:00 | 10$ | 10$
1 | Dec 20, 2011, 00:00:01 | Dec 26, 2011, 00:00:00 | 7.5$ | 10$
1 | Dec 26, 2011, 00:00:01 | Jan 1, 2038, 00:00:00 | 10$ | 10$
我们在这里所做的是:
endDateTimeStamp
字段以反射(reflect)销售的开始在没有重叠的时间戳的情况下,保证在查询数据库价格时获得一条记录。因此,
SELECT p.Name, pp.price, pp.original_price
FROM Product p
INNER JOIN ProductPricing pp ON pp.productId = p.productId
WHERE NOW() BETWEEN pp.startDateTimeStamp AND pp.endDateTimeStamp
会为您提供当前价格的产品列表。
关于mysql - 后续: how to model discount on items in a database?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8578795/