我正在处理的一个项目要求对记录进行数字“签名”,之后任何修改都会创建该行的新“版本”。出于监管原因,不能修改“签名”记录,并且不应该经常修改新版本。过去,这样做是通过创建一个与主表具有相同架构的单独日志记录表以及一些额外的列来跟踪谁修改它以及何时修改它。
但是,在使用 SharePoint 进行一些工作后,将所有数据(包括不同版本)放入同一个表中,我想到了一种不同的方法,我找不到任何人这样做的例子:我可以把新版本的行放在右边在同一个表中并增加版本号。然后将版本号添加到PK。
优点:
- 实现很简单,只需创建一个“代替更新”触发器,它执行插入而不是更新行是“签名的”。我可以轻松地在触发器中添加要更新的 IsCurrentVersion 列。
- 查询旧版本很容易,只需获取具有我想要的 ID 的所有记录,让用户从列表中选择。
- 触发器很好,因为它保证如果签名后行不能被更新(出于监管和审计目的)。
- 不必将表的模式更改复制到镜像“记录”表。
缺点:
- 该表可能会变大一些,但大多数情况下,“签名”后记录不会更改。客户估计在当前使用水平下每年最多 100,000 行。SQL Server 可以处理数亿行,所以这看起来还不错。
- 索引和性能可能是一个问题。SharePoint 将 tp_CalculatedVersion int 添加到 PK,其中最新版本的计算数字始终为 0。我可以做同样的事情并根据版本号计算它。这对性能有帮助吗?
查询数据有一个额外的步骤,以确保您获得最新版本,但这可以在 SP 中处理。
在这种情况下还有什么其他缺点。我错过了什么吗??