Sql server 如何跟踪修订?

Sql server 如何跟踪修订?,sql-server,nhibernate,versioning,revision-history,Sql Server,Nhibernate,Versioning,Revision History,我正试图设计我的数据库,我希望有能力保持变化的历史记录 我要一张桌子,上面有食物的所有营养成分。当用户对项目进行更改时(比如将卡路里从100更改为200)。我想把它作为一个新的修订 这样一来,一个过来的人可以看到它原来是100卡路里,然后被更新为200卡路里。我想这和stack现在的做法很相似,在这里你可以看到编辑过的内容 我想知道做这件事最好的方法是什么?我正在使用sql server和nhibernate 我想再写一个专栏或者是修订号。然后,每次进行修订时,数字都会增加。这是一个好方法吗?你

我正试图设计我的数据库,我希望有能力保持变化的历史记录

我要一张桌子,上面有食物的所有营养成分。当用户对项目进行更改时(比如将卡路里从100更改为200)。我想把它作为一个新的修订

这样一来,一个过来的人可以看到它原来是100卡路里,然后被更新为200卡路里。我想这和stack现在的做法很相似,在这里你可以看到编辑过的内容

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


我想再写一个专栏或者是修订号。然后,每次进行修订时,数字都会增加。这是一个好方法吗?

你可以按照你写的那样,添加另一个修订号


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

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

这看起来像是对NHibernate使用触发器,但您可以使用类似于中提到的NHibernate拦截器或事件。我想说触发器比依赖代码更好,但是如果这是使用NHibernate的唯一方法,那么也许值得一看

最后,我看到它提到可以使用SQL Server本机或跟踪功能。我自己从来没有用过这个,但记得有一篇文章说,这取代了创建自己的手动审计表和相关触发器的需要。它似乎做了你想从上面的链接引用说明

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


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

帮助你。

嗯,时间戳可能很好,因为我有点担心的一件事是增加修订号。如果两个人同时更新,会发生什么情况?如何确保数字正确递增(不是两个人都尝试将数字递增到2)@chobo2 Sql server应该已经解决了这个问题。如果你更新营养学设置卡路里=200,修订版=revision+1,…是,但我不需要得到修订版中的内容。这意味着我必须让nhibernate获取最后一个修订号并存储它,然后向其中添加1?@chobo2如果您说
revision=revision+1
,您的数据库将执行增量。我不熟悉NHibernate,但从我看到的文档中,您可以告诉NHibernate使用自定义的update SQL语句。它必须是单独的审计表吗。我只是觉得审计表很奇怪。我不是真的在审计任何事情。所以我不知道我是否真的需要一张单独的桌子。我会读更多的内容。是的,它必须是独立的审计表。如果您要寻找的不是“审计”,而是业务规则的一部分,那么Envers可能不适合您。也许你可以在你的领域模型中解决它,而不是一些技术解决方案?基本上,我在寻找一些东西,我可以显示不同版本的价值观改变。没有任何审计目的。所以我想,只要在同一张表中添加一个修订号就可以了。