数据库
首页 > 数据库> > mysql – Followup:如何对数据库中的项目进行折扣建模?

mysql – Followup:如何对数据库中的项目进行折扣建模?

作者:互联网

我正在建立一个电子商务网站,并希望在限定时间内提供某些商品的折扣.我想展示我们为每件产品提供多少折扣.因此,我需要每个产品两个值,原始价格和给定持续时间的折扣价格.

这是我要求的question answer的后续跟进

架构:

>产品

> productId
>姓名

> ProductPricing

> productId(FK)
> startDateTimeStamp
> endDateTimeStamp
>价格
>原价仅适用于我们使用方法A(稍后提供)

数据:

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$

我们在这里做的是:

>使用2038时间戳更新现有记录,更改endDateTimeStamp字段以反映销售的开始
>插入新记录以定义销售
>插入另一条新记录以再次反映正常价格

如果没有重叠的时间戳,当您查询数据库中的价格时,您可以保证获得单个记录.从而,

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,database-design,entity-relationship
来源: https://codeday.me/bug/20190613/1234838.html