【问题标题】:Followup: how to model discount on items in a database?跟进:如何对数据库中的项目进行折扣建模?
【发布时间】:2012-01-24 14:44:22
【问题描述】:

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

这是对answer 我询问的question 的跟进

架构:

  • 产品

    • 产品标识
    • 姓名
  • 产品定价

    • 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。 这个时候deal已经过期了,要不要用触发器重置endTimeStamp?

方法 B。 我应该删除交易刚刚过期的产品的最新记录吗?

【问题讨论】:

    标签: mysql database-design entity-relationship


    【解决方案1】:

    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$
    

    我们在这里所做的是:

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

    没有重叠的时间戳,当您在数据库中查询您的价格时,您一定会获得一条记录。因此,

    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
    

    将为您提供当前定价的产品列表。

    【讨论】:

      猜你喜欢
      • 2012-01-24
      • 2019-07-11
      • 2011-05-08
      • 1970-01-01
      • 1970-01-01
      • 2018-08-31
      • 1970-01-01
      • 2013-04-06
      • 2011-04-26
      相关资源
      最近更新 更多