我们有一个Rails应用程序,其Subscription
模型的字段为status
字符串。值包括active
,canceled
,dunning
等等。
我们不记录status
何时从一个州过渡到另一个州,但我想。我的挑战在于考虑如何轻松回答这个问题:
“3个月前订阅的是active
?”
我可以使用以下代码创建subscription_status_transitions
的表格。
subscription_id
status
transitioned_at
为了回答上面的问题,似乎我必须得到第一个status
的<有问题的日期(3个月前)?
有没有更好的方法记录这种事情来轻松回答这个问题?
答案 0 :(得分:1)
我可以看到两种替代解决方案:事件采购和临时表
通过事件采购,您将记录有关状态更改的事件,并根据事件列表构建Subscription
状态。要获取历史状态,您只需查询事件,直到您感兴趣的时间点为止。它与你描述的非常相似。
您还可以使用时态表并在订阅状态(或整个订阅)有效时保留时间戳(valid_to
,valid_from
)。您不必更新行,而是插入新行并在旧版本中设置valid_to
时间戳。您只需查询具有valid_from < $date AND valid_to > $date
的子选项。关于wiki的更多细节 - 它是一个很好的首发。