字段历史跟踪 - SQL 服务器

Field history tracking - SQL Server

我们需要跟踪某些数据库字段的历史记录并在一段时间内进行报告,即假设有一个帐户 table,其字段状态为 (Active/Inactive)。

随着时间的推移,帐户状态可能会从“活跃”变为“不活跃”,反之亦然。

我们需要帐户级别的报告,以查看帐户在某个时间段(即一个月)内保持不活动状态的时间

我们正在讨论数据库 table 的几个选项来跟踪数据,

  1. [时间戳] [字段] [旧值] [新值] - 更通用但在没有数据转换的情况下很难生成报告。

  2. [时间戳] [状态] [非活动开始时间] [非活动结束时间] - 无需任何数据转换即可轻松生成报告。

选项 1 看起来更像是审计。选项 2 看起来更像是报告。我会为您指出那个方向 - 您更喜欢哪个?

如果你选择选项 1,那么你就接近领域事件架构的哲学。在该理论中,您只需存储系统事件、已发生的事情,以及导致这些事件发生的所有低级细节。然后你计算出你想要的所有结果——例如,可以从事件流中构建不同的报告,尽管你必须破解数据才能达到那个阶段。

如果您选择选项 2,那么您就接近于 CQRS 架构哲学。在那里,您保留单独的只读模式(Q 代表系统的查询部分)。查询存储中的数据易于读取,即以易于视图呈现的方式格式化。

现在您知道在您的系统中什么对您更重要了。您是否希望能够重建发生的事件的顺序(审计很重要)?如果是,那么 select 选项 1。您是否希望能够轻松显示报告,而不关心事情是如何发生的?如果是,那么 select 选项 2.