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

这是我要求的answerquestion的后续措施

架构:

  • 产品
  • productId
  • 名称
  • 产品定价
  • 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字段以反射(reflect)销售的开始
  • 插入新记录以定义销售
  • 插入另一个新记录以再次反射(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/

    10-13 05:25