仅插入数据模式

Insert-only data pattern

我正在为需要完整数据审计历史记录的系统编写规范。

我以前使用过一些不错的审计模式,但我更倾向于此解决方案的仅插入模式。这个想法是记录永远不会被更新,只会被插入和加盖时间戳。

这样,我将始终能够根据我的预定义分组检索记录的最新版本,并且我还将拥有该数据之前 "versions" 的完美历史记录。

所以我的问题只是:这种方法有模式吗?它叫什么?

如果您采用这种方法,您最终会到达的地方称为 "Event sourcing"。请参阅 https://martinfowler.com/eaaDev/EventSourcing.html 和许多 google 结果,因为您知道这些神奇的词。

基本思想是,您不仅要记录事物的当前状态,还要记录产生当前状态所发生的一切。当前状态然后变得多余——您可以随意重新生成它,重新生成任何以前的状态,从事件中创建新的不可预见的视图,等等。

我喜欢下面的模式。 (对不起,我不知道名字。)

使用 2 tables,而不是一个:

  • 当前值 -- 例如,您当前的银行余额。它对很多动作都有用。
  • 历史 -- 这包含所做的所有更改 -- 贷方、借方等。这对于审计和其他“历史”目的很有用。

'history' table 是“仅插入”的,因为它必须用于“审计”目的。

'current' table 本质上是“仅更新”。如有必要,可以从另一个table.

重新计算