gpt4 book ai didi

database - 如何在数据库中保留修改的历史详细信息(审计跟踪)?

转载 作者:搜寻专家 更新时间:2023-10-30 20:32:26 24 4
gpt4 key购买 nike

我是一名 J2EE 开发人员,我们正在使用 PostgreSQL 数据库的休眠映射。

我们必须跟踪数据库中发生的任何更改,换句话说,应该保存任何字段的所有先前和当前值。每个字段可以是任何类型(bytea、int、char...)

用一个简单的表格很容易,但我们用对象图做事情就更难了。

因此,从 UML 的角度来看,我们有一个对象图来存储在数据库中,其中包含每个更改和用户。

任何想法或模式如何做到这一点?

最佳答案

一种常见的方法是存储对象的版本。

如果向要存储审计跟踪的每个表添加“版本”和“已删除”字段,那么请遵循以下规则,而不是进行正常的更新和删除:

  • 插入 - 将版本号设置为 0 并正常插入。
  • 更新 - 增加版本号并改为插入。
  • 删除 - 增加版本号,将 deleted 字段设置为 true 并改为插入。
  • 检索 - 获取版本号最高的记录并将其返回。

如果您遵循这种模式,每次更新时都会创建一条新记录而不是覆盖旧数据,因此您将始终能够回溯并查看所有旧对象。

这对于对象图的工作方式完全相同,只需将新字段添加到对象图中的每个表,并如上所述处理每个表的每个插入/更新/删除。

如果您需要知道哪个用户进行了修改,您只需添加一个“ModifiedBy”字段即可。

(您可以在 DA 层代码中执行此处理,或者如果您愿意,可以使用数据库触发器来捕获更新/删除/检索调用并按照规则重新处理它们。)

显然,您需要考虑空间要求,因为每次更新都会产生一个全新的记录。如果您的应用程序更新频繁,您将生成大量数据。通常还包含“上次修改时间”字段,这样您就可以离线处理数据库并删除比所需时间早的数据。

关于database - 如何在数据库中保留修改的历史详细信息(审计跟踪)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2530719/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com