0

我正在尝试设计我的数据库,并且我希望能够跟踪更改的历史记录。

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

这样来的人可以看到它是原来的 100 卡路里,然后更新为 200 卡路里。我想这很像堆栈现在的工作方式,您可以在其中看到已编辑的内容。

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

我正在考虑有另一列或其他内容作为修订号。然后每次进行修订时,数字都会增加。这是一个好方法吗?

4

3 回答 3

1

NHibernate.Envers可以帮助你。

于 2013-02-04T09:21:49.337 回答
0

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

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

于 2013-02-04T00:04:53.110 回答
0

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

在 NHibernate 中使用触发器似乎很困难,但您可以使用本文中提到的 NHibernate 拦截器或事件之类的东西。我会说触发器比依赖您的代码更可取,但如果这是使用 NHibernate 的唯一方法,那么也许值得一看。

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

可以将数据库对象上的用户、角色或组的活动审计限制在表级别。也就是说,您可以将 SQL Server 审计作为目标,以跟踪用户的特定活动,直至单个表级别。例如,SQL Server Audit 允许记录 DBO 对 Payroll 表的所有更新。

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

于 2013-02-04T02:07:48.087 回答