我想在我的所有表中添加两列 [创建时间] 和 [修改时间] 以捕获审计跟踪。将来这些字段可能用于对表进行分区。请建议这样做的最佳方法是什么?通过数据库中的一些触发器或通过代码更新这些值是否明智。我们正在使用 Hibernate API 与 Oracle 11g 通信。
问问题
376 次
2 回答
1
由于您已经在使用 Hibernate,请查看Hibernate Envers:
Envers 项目旨在实现对持久类的轻松审计/版本控制。您所要做的就是使用@Audited 注释您想要审计的持久类或其某些属性。对于每个被审计的实体,将创建一个表,其中将保存对该实体所做的更改的历史记录。然后,您可以轻松检索和查询历史数据。
这是更重量级的解决方案,但可以让您的应用程序完全控制。
或者,您可以通过 Oracle PL/SQL 触发器执行此操作,但您的应用程序对此的控制有限。
于 2011-05-18T10:17:52.243 回答
0
有优点也有缺点。
就个人而言,我使用触发器。
但是,这样做会导致一个有趣的边缘情况,当您有一个主表和许多要共享其审计跟踪的相关表时。说与订单相关的订单 + 订单行 + [许多其他相关表格]。在这种情况下,要审计的有趣数据是订单,因此订单应该包含与审计相关的详细信息。如果您有一个触发器,它会在每次插入/更新/删除订单行 + [许多其他相关表] 时触发,那么性能最终会受到影响。
于 2011-05-18T10:21:23.603 回答