在SQL Server中维护两个不同版本的记录

时间:2015-06-10 16:22:03

标签: sql-server

我有一个SQL Server表,其中包含以下列:

Id, HeaderText, ContentText, ProposedContentId, Active

我想维护由用户使用网站编辑的两个版本的记录。例如,用户John可以编辑以下记录的 HeaderText ContentText 字段,然后点击保存。

    Id,    HeaderText,    ContentText,    ProposedContentId, Active
==> 1,    Hello,          This is a test,    NULL,             1

但是我没有更新同一条记录,而是想创建另一条记录并从旧记录指向新记录。现在表格如下:

     Id, HeaderText,    ContentText,         ProposedContentId, Active
     1, Hello,          This is a test,           2,              0
 ==> 2, Hello World,    This is a new post,      NULL,            1

如您所见,旧记录标记为不活跃,现在 ProposedContentId 指向新创建的行。

我不知道这是否是解决这个问题的好办法。如果有的话,请建议更好的方法。

编辑:我只需要维护两个副本(旧版和新版),我无法创建额外的表格。

1 个答案:

答案 0 :(得分:0)

我个人不会使用此Active标记作为跟踪最新记录的方式。这种类型的标识符很难维护。

我会在您的表格中添加内容标识符。然后,当记录更改时,只需插入具有相同内容标识符的新数据。 Id字段将自动递增,或者您可以添加日期时间字段,然后您可以通过查看记录给定ContentId的最高Id(或最新时间戳)来跟踪活动记录。

Id,   ContentId   HeaderText       ContentText          
1     1           Hello            This is a test        
2     1           Hello World      This is a new post    
3     1           Hello again!     The content was changed again
4     2           New Content      This is some new text  
5     2           Newer Content    This is that other record, updated

如果需要,您可以在此设置中添加有效标记,但它并不比每个拥有自己的标识符(如ContentId和/或SELECT A.* FROM YourTable A JOIN ( SELECT ContentId, MAX(Id) MaxId FROM YourTable GROUP BY ContentId) B ON A.ContentId = B.ContentId AND A.Id = B.MaxId 的记录更复杂。通过具有最高ID或最新时间戳的任何内容来了解​​活动记录。但是你更喜欢这样做。

如果你想获得"活跃"记录,你需要做的就是这样运行:

Id,   ContentId   HeaderText       ContentText          
3     1           Hello again!     The content was changed again
5     2           Newer Content    This is that other record, updated

那应该给你以下内容:

[self.tableCellButton addTarget:self action:@selector(yourAction:) forControlEvents:UIControlEventTouchUpInside];

我希望这有助于或至少给你一些思考的食物。