保存用户在多用户sql数据库中所做更改的跟踪

时间:2012-12-25 13:09:34

标签: sql database tsql database-design

我正在研究关系数据库的设计。它有几个表,应用程序级别有多个用户。我需要知道对某个表的某个记录的更改,由哪个用户,哪个时间以及实际更改的内容。有一个用于保存用户信息的表,此表也包含在此行为中。

我应该如何在SQL数据库设计中执行此操作,以便让用户看到哪一个进行了这些更改?

2 个答案:

答案 0 :(得分:0)

你想要的是一个类似Wiki的版本。基本上,对于要保留版本的每个表,您至少需要创建该表的副本,其中包含您添加的字段(userid,添加时)。只要您只需要跟踪更改,这可能就是它的全部内容。然后,在编辑时,您只需创建该复制表中当前行的备份,并将新行放在实际表中。通过这种方式,您可以(希望)添加版本,而无需触及现有的演示代码。

如果您需要记录创建新行和删除等其他操作,这会变得有点棘手。

如果您需要一个代码示例,请查看某些Wiki的内容,例如https://mediawiki.org/

答案 1 :(得分:0)

对于初学者,您可以查看sql server版本跟踪机制(行版本控制或行更改)。之后,您可以查看sql server审计功能。我认为sql server audit最适合您的需求。

另一方面,如果你想进行ad-hok版本控制,那么你就不能去触发器了。想象一下,您必须为所有表创建插入,更新和删除的触发器。这是不好的做法。

我认为应该避免临时版本控制(性能下降并且难以支持)但是如果无法避免,我肯定会使用CONTEXT_INFO来跟踪当前用户,然后我会尝试创建一些读取表的模式,我将通过使用sql server更改跟踪机制进行更改,并将其存储在tablename,changeduser,changedtime,column,prevValue,newValue样式中。我不会复制每一张表以进行更改。