在我的数据库中,我有一个价格表。价格在一段时间内或永久有效,但在给定时间始终存在有效价格。
我想知道你是宁愿有一个starts_at
和ends_at
列,哪里ends_at
总是等于前一个starts_at
值,还是只starts_at
在给定日期查询最后一个值?
我可以看到拥有between
功能的好处,但另一方面,更新一行很麻烦,因为它可能会影响ends_at
这里和那里的日期。
在我的数据库中,我有一个价格表。价格在一段时间内或永久有效,但在给定时间始终存在有效价格。
我想知道你是宁愿有一个starts_at
和ends_at
列,哪里ends_at
总是等于前一个starts_at
值,还是只starts_at
在给定日期查询最后一个值?
我可以看到拥有between
功能的好处,但另一方面,更新一行很麻烦,因为它可能会影响ends_at
这里和那里的日期。
无论哪种方式,你都可以做到。
如果您喜欢 的想法
between
,那么我会在插入后添加一个触发器,以更新ends_at
前一个记录/实例的。触发器是同步重复(非标准化)数据的最佳方式。
如果您只有数千行,请执行任何操作。如果你有几百万行,那么你会发现“在开始和结束之间”效率低下,没有
INDEX
办法让它快。当每行都有开始和结束时,优化器不知道是否存在重叠范围。因此,它必须假设您进行的任何查找都可能有多个结果。
ip-ranges展示了如何使非重叠范围有效地工作。(唉,要适应你的应用程序的变化需要一些适应。)