Sql server 如何存储多个版本的DB数据以进行审核/合并?

Sql server 如何存储多个版本的DB数据以进行审核/合并?,sql-server,asp.net-mvc,Sql Server,Asp.net Mvc,我正在使用ASP.net MVC和SQL Server,但我认为答案并不取决于此体系结构,我同样对使用其他体系结构的解决方案感兴趣。所以 我在SQL中有一个对象(行),需要进行版本控制、多人更新、批准和合并 选项A) 为了快速而肮脏的解决方案,我将执行以下操作。它在一个受控的环境中,每个季度有一次更新,由一组有限的角色按照给定的顺序完成,因此,虽然这看起来非常混乱,但实际上工作正常,我将继续使用它,没有更好的选择 主表: ID & Year <-- combined to form

我正在使用ASP.net MVC和SQL Server,但我认为答案并不取决于此体系结构,我同样对使用其他体系结构的解决方案感兴趣。所以

我在SQL中有一个对象(行),需要进行版本控制、多人更新、批准和合并

选项A)
为了快速而肮脏的解决方案,我将执行以下操作。它在一个受控的环境中,每个季度有一次更新,由一组有限的角色按照给定的顺序完成,因此,虽然这看起来非常混乱,但实际上工作正常,我将继续使用它,没有更好的选择

主表:

ID & Year <-- combined to form primary key (this fulfills my versioning -- I only need one per year, or one per quarter in some cases)
A handful of fields that can't be edited, like foreign keys
Value1
Value2
...
Instance ID (Primary Key)
Main ID (this would be the primary key if there weren't potentially several instances)
Flag (edit, live, archive, delete)
Person
Value1
Value2
Value3
选项B)
现在,我进入了一个实例,在这个实例中,不是每个季度进行一组更新,它们可能正在进行中,可能是由不同的人发起的。我过去做过类似的事情:

主表:

ID & Year <-- combined to form primary key (this fulfills my versioning -- I only need one per year, or one per quarter in some cases)
A handful of fields that can't be edited, like foreign keys
Value1
Value2
...
Instance ID (Primary Key)
Main ID (this would be the primary key if there weren't potentially several instances)
Flag (edit, live, archive, delete)
Person
Value1
Value2
Value3
因此,我将有一个基本行(实例id 1,主id 1,标记“live”)。每当有人更新时,我都会创建一个新行(实例id 2,主id 1,标志“编辑”)。在某个时候,评审员将能够看到实时数据和任何建议的更改。然后,审阅者将选择要合并的更改,我将创建一个带有live标志的新行,并将所有旧的“编辑”和“live”更改为“存档”

因此,我的问题是:

  • 哪种选择最好?
    B看起来好多了,但有那么好吗?有没有其他我没有想到的解决方法
  • 如果B是解决问题的方法,那么是否有任何库/示例可以帮助我?
    这似乎是一个有点复杂的解决方案,需要大量比较和跟踪变量。 同样,我如何最好地处理ASP.net MVC中的审阅/比较。如果我有一个Models.Main,我是否应该添加一个名为Compare(
    Models.Main
    )的扩展方法,以便
    Live\u Row.Compare
    (Edit\u Row)只返回增量

  • 我不能对你的MVC问题发表评论,但选项B在我看来相当合理。 对于我们的项目,我们在正在更新的表上使用触发器,该触发器将表中最感兴趣的值的更改记录以及用户登录名、唯一标识符和时间戳保存到“影子”表中,以便进行修订/编辑日志记录