用于跟踪编辑历史的数据库模式

时间:2012-10-03 17:13:48

标签: database

我正在为政府竞赛创建一个问答网站,用户可以在这里提出问题并得到答案。

我需要允许用户编辑彼此的问题和答案,如StackOverflow。问题是我需要存储版本历史记录,以便可以恢复错误的编辑。

为此我创建了一个新表并将原始帖子存储在其中,直到编辑成功提交。

如何保留修订历史记录以便显示以前的版本,如有必要,可以恢复编辑?

2 个答案:

答案 0 :(得分:4)

您可以通过定义问题来保留修订历史记录。带有计数器字段的答案表。

Question                 Answer
--------                 ------ 
Question ID              Answer ID
Edit counter             Edit counter
Question text            Answer Text

问题ID和答案ID是自动递增的整数。

首次发布问题或答案时,编辑计数器为零。在第一次编辑之后,编写一个新行,编辑计数器设置为1.下一个编辑是一个新行,编辑计数器设置为2.依此类推。

这些表的主要索引是ID和编辑计数器。 ID为升序,编辑计数器正在降序。这样,最近的编辑是检索到的第一行。编辑计数器会告诉您已进行了多少次编辑。

答案 1 :(得分:1)

不要使用单独的表格。如果不使用较新版本的唯一原因是未完成或无效的编辑会话,则依赖于数据库中的普通事务。您只需在事务中替换数据库中的文本即可。该事务仅在编辑被视为“有效”时提交。否则,您回滚事务。

但是,如果您需要所有以前的修订,这在大多数情况下都是有意义的,那么仍然可以将内容保存在单个表中。只需为每个问题或答案的编辑添加版本之后的版本。如果未指定id,则获取最新的。这样您仍然可以访问所有以前的修订版。