如何跟踪修订?

时间:2013-02-03 23:39:02

标签: sql-server nhibernate versioning revision-history

我正在尝试设计我的数据库,我希望能够跟踪变化的历史。

我将有一张桌子,上面有食物的所有营养成分。当用户对项目进行更改时(例如将卡路里从100更改为200)。我希望将其作为新版本。

这样一来,一个人可以看到它是原始的100卡路里,然后更新到200卡路里。我想这就像现在的堆栈一样,你可以看到已编辑的内容。

我想知道最好的方法是什么?我正在使用sql server和nhibernate。

我在考虑有另一个专栏或某些修订号。然后,每次修订时,数字都会递增。这是一个好方法吗?

3 个答案:

答案 0 :(得分:1)

NHibernate.Envers可以帮助您。

答案 1 :(得分:0)

你可以按照自己的意思去做,添加另一个版本号。

另一种方法是添加时间戳并将其用作历史记录。每次更新项目时,都会添加一行,其中包含当前值和当前时间戳。

答案 2 :(得分:0)

我通常使用某种形式的审计表来处理这个问题。我目前工作的地方是我们在审计模式下的所有审计表,并且我们有一个审计表,用于我们希望跟踪修订的每一个。我们没有使用NHibernate,因此我们只是利用触发器来确保对给定行的每次更新都记录在审计表中,同时还有时间戳和用户ID,这样您就可以获得一些上下文和顺序。修改了。

似乎it is difficult使用NHibernate触发器,但你可以使用像this post中提到的NHibernate拦截器或事件。我说触发器比依赖你的代码更可取,但如果这是NHibernate的唯一方法,那么也许值得一看。

最后,我发现它提到您可以使用SQL Server本机audit或跟踪功能。我自己从来没有使用过这个,但是请记住一些关于SO的帖子,建议这取代了创建自己的手动审计表和相关触发器的需要。它似乎做了你想要的,如上面链接中的引用所示;

  

审核数据库上的用户,角色或组的活动   对象可以限制到表级别。也就是说,你可以   目标SQL Server Audit以跟踪用户的特定活动或   用户直到单个表级别。例如,SQL Server   审计允许对工资核算的所有更新进行记录   DBO的表格。

对我而言,这听起来更像是一次真正的审计而不仅仅是修订历史,但也许在这方面有更多经验的人可以评论其用于修订跟踪的可行性。当然,你也必须看看它对NHibernate的影响。