我有3张桌子:
因此,版本化价格的主要原因是因为价格可以在未来改变,我想保留有关统计数据的过去价格的信息,我想要的是门票有实际价格,而不是未来改变的价格。
你能给我一些问题的例子吗?
答案 0 :(得分: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)
如您所见,您可以参考price_versions
中的tickets
来获取具体价格。但您也可以轻松收集通用价格相关信息(通过加入prices
表格)。
这种方法允许您构造一个额外的约束,检查issued_at
不是started_at
之前而不是ended_at
之后(相应行中的NOT NULL)。但我认为这是一个补充,而不是一个要求。