【问题标题】:How to expand this tables to support revision history如何扩展此表以支持修订历史记录
【发布时间】:2012-10-23 21:43:55
【问题描述】:

我有 3 张桌子:

  • 价目表(pricelist_id、名称)
  • 价格(price_id、pricelist_id、价格、备注)
  • 门票(ticket_id、price_id、姓名、时间)

所以,版本化价格的主要原因是因为价格可以在未来更改,我想保留过去价格的信息以供统计,并且我希望门票具有真实价格,而不是未来更改的价格。

你能给我一些查询的例子吗?

【问题讨论】:

  • 在价格表中仅存储价格表的名称,例如“音乐会价格”。在价格中存储数据,例如价格:100 美元注:成人,另一行可以是儿童 80 美元,依此类推。所有这些价格都使用 pricelist_id 附加到价格表。门票包含有关已售门票的数据。

标签: mysql revision-history


【解决方案1】:

我想一种可能的方法是制作两个价格表而不是两个:第一个将存储一些与价格相关的通用数据(如“note”和“pricelist_id”链接,因为这些不会随时间变化),以及第二个将存储实际价格(可能还包括它们的激活时间戳——但这不是必需的):

prices         (price_id, pricelist_id, note)
price_versions (price_ver_id, price_id, price, started_at, ended_at)
tickets        (ticket_id, price_ver_id, name, issued_at) 

如您所见,您在tickets 中引用price_versions 以获取具体价格。但您也可以轻松收集与价格相关的通用信息(通过从那里加入 prices 表)。

这种方法可以让您构造一个额外的约束,检查issued_at 不在started_at 之前,而不是在ended_at 之后(相应行中的NOT NULL)。但我想这是一个补充,而不是要求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-29
    • 1970-01-01
    • 1970-01-01
    • 2020-12-28
    • 1970-01-01
    相关资源
    最近更新 更多