我有一个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 指向新创建的行。
我不知道这是否是解决这个问题的好办法。如果有的话,请建议更好的方法。
编辑:我只需要维护两个副本(旧版和新版),我无法创建额外的表格。
答案 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];
我希望这有助于或至少给你一些思考的食物。