我们需要向项目添加数据审核。
我们可以创建某种Log
或Audit
表来记录SQL数据库中的更改。但是,让数据库中的数据不可变是不是更好的主意。因此,不是更新现有值,而是添加新的带时间戳的行。这样就可以跟踪所有更改。
我们正在使用存储库模式,因此这可以提供一种从客户端代码中完全抽象这种不变性/历史/版本控制的方法。我们的存储库包含基本的CRUD操作(添加,更新,删除,查找/获取)。需要进行以下更改:
Identity
插入并设置Timestamp
。Timestamp
。IsDeleted
标记设置为false并设置Timestamp
。Timestamp
值且IsDeleted
为假的行。其他方法:
IsLatest
标志我唯一的抱怨是,如果数据不知何故坏了,可以在给定的日期和时间内返回多行。
这个设计中是否存在任何重大缺陷,或者我可以采取哪些不同的方式?上面可能有一个正式的方法吗?
这是否与事件采购有关?
答案 0 :(得分:2)
我对此的看法:
除了标识列之外,您将无法为数据创建唯一约束。
此外,使FK处理复杂化。更新父行时会发生什么?它是插入,因此是新的标识,但子行仍然引用“旧”记录。
表现会受到影响。
我建议为存档创建一个单独的表。您可以使用带有UPDATE的OUTPUT子句简化更新,并在同一语句中插入存档。
您描述的方法更适合DWH,然后是OLTP数据库。