记录状态转换



我们有一个 Rails 应用程序,它有一个Subscription模型,status字段是一个字符串。值是像activecanceleddunning等。

我们不会记录status何时从一种状态过渡到另一种状态,但我想记录。我的挑战是思考如何能够轻松回答这个问题:

"3 个月前active了哪些订阅?">

我可以用以下方法制作一张像subscription_status_transitions这样的桌子:

  • subscription_id
  • status
  • transitioned_at

为了回答上面的问题,似乎我必须得到第一个status,这是<日期(3个月前(?>

有没有更好的方法来记录这种事情来轻松回答这个问题?

我可以看到两种替代解决方案:事件源和临时表

使用事件溯源,您将记录有关状态更改的事件,并根据事件列表构建Subscription状态。要获取历史状态,您只需查询事件,直到您感兴趣的时间点。它与您描述的非常相似。

您还可以使用时态表并保留订阅雕像(或整个订阅(有效时的时间戳(valid_tovalid_from(。您将插入一个新行并在旧行中设置valid_to时间戳,而不是更新行。您只需查询具有valid_from < $date AND valid_to > $date的子订阅。维基上的更多详细信息 - 这是一个很好的开端。

最新更新