如何在主管批准更改前保留新旧版本的记录?

问题描述:

我目前正在开发一个ASP.NET MVC 3项目,在该项目中我必须记录具有特定属性的字段更改。例如:如何在主管批准更改前保留新旧版本的记录?

public class MyModel 
{ 
    public String PropertyOne { get; set; } 

    // Need to keep track of these properties 
    [RequiresSupervisorKey] 
    public String PropertyTwo { get; set; } 
} 

只要其中一个字段被更改,它就需要主管批准这些字段更改。 在更改被批准之前,记录将处于未决状态,并且我不知何故需要保留旧记录和新记录直到这样的时间!

有关存储这些记录的最佳做法是什么?我应该在数据库中的表中有2条记录,还是应该有一个审计表,可以存储这些数据直至获得批准。

谢谢。

我会把它们保存在一张桌子上。使用组合键识别唯一行。具有autoincretment ID的行ID。和datetime作为组合键的第二部分。当第三行可以存储状态。这也允许你进行版本控制。如果你选择显示的字段,你可以通过id order by datetime desc来选择其中状态被认可的限制1.希望这会有所帮助;-)

+0

但这也取决于您的数据库的大小和速度,它的记录。对于真正庞大的系统,我宁愿建议使用第二个表来跟踪这些变化。我最好的做法是让这两个表总是像上面描述的那样具有相同的模式。 – Manuel 2012-02-27 15:01:38

+0

尽管每个人都给出了非常好的反馈,但我会说这与我的情况最相关。谢谢。 – jacqijvv 2012-02-28 08:48:19

+0

Thx,你可以投票答案给我信贷;-) – Manuel 2012-03-01 16:23:01

这是我从其他项目的.02,但我会添加一个版本或状态列到表中,并保留n表中的记录数。我不知道在你的系统中是否有可能改变两个不同用户的记录,但这种情况通常是这样的。审计表是一个可以接受的解决方案,但总的来说,我更喜欢将事情保存在一张表中。

我会保留表中的两个记录(旧的和新的)状态(例如活动,挂起,删除,拒登)(或者您认为需要的状态)。

然后,我将创建一个仅显示活动记录(用于大多数用途)和仅显示待处理记录(用于主管批准页)的视图。

我会在表上创建一个触发器,以确保一次只有一条记录处于活动状态。因此,如果主管将记录从挂起更改为活动,则会将旧记录更改为删除状态。如果主管拒绝更改,则会进入拒登状态。

为了保持表格的灵活性(您表示不需要永久存储旧状态),我会在夜间运行一项作业,以删除处于删除状态或已拒登状态的所有记录。