我们目前需要为我们的一些主要业务实体实现审计跟踪生成,像往常一样,在这些情况下,我们需要保留每个已更改字段的旧值和新值以及一些标头数据,如时间戳、实体 ID 和用户谁做了拯救。
我知道有不同的方法可以做到这一点,例如:
- .NET 代码端,使用反射
- SQL Server 端触发器
- SQL Server CDC(更改数据捕获)
基于 .NET 反射的方法可能需要更长的时间来编写,但如果做得好,它将足够聪明,可以包含将来添加的新属性而无需更改任何代码,并且它还可以扩展和比较所有子实体(如添加到我们的主要 .NET 实体的其他子实体)。
我们实际上有一个遗留应用程序,它使用这种基于 .NET 的审计跟踪生成,我们将整个审计跟踪作为 XML 字段保存在 SQL 数据库中,多年来,审计表现在大约是 35GB 的数据。
我在想它在以下方面是多么容易成为基于触发器的解决方案:
- 首次实施
- 未来修改实体以进行审计所需的每项更改(添加/更改/删除字段等...)
- 审计数据的可读性如何?我们可以简单地查询一个显示特定保存操作的旧值和新值的查询吗?
……表演怎么样?
有没有人有这两种方法的经验,可以建议或指出一些利弊?