在编辑时保存所有版本的帖子很流行(比如在 stackexchange 项目中),因为我们可以恢复旧版本。我想知道保存所有版本的最佳方法是什么。
方法一:将所有版本存储在同一张表中,并添加订单或事件版本列。这会使表格太长。
方法 2:创建一个存档表来存储旧版本。
在这两种方法中,我想知道如何处理作为文章主要标识符的行 ID。
最佳答案
保存修订历史记录的“最佳”方式取决于您的具体目标/约束是什么——而您没有提到这些。
但这里有一些关于您建议的两种方法的想法:
为帖子创建一个表,为帖子历史创建一个表,例如:
create table posts ( id int primary key, userid int ); create table posthistory ( postid int, revisionid int, content varchar(1000), foreign key (postid) references posts(id), primary key (postid, revisionid) );
(显然会有更多的列、外键等)这实现起来很简单,也很容易理解(并且很容易让 RDBMS 保持引用完整性),但是正如你提到的,可能会导致 posthistory
行太多,无法快速搜索。
请注意,postid
是 posthistory
中的外键(以及 posts
的 PK)。
- 使用非规范化模式,其中所有最新修订都在一个表中,而以前的修订在一个单独的表中。这需要程序部分有更多逻辑,即
当我添加新版本时,替换帖子表中具有相同 id 的帖子,并将其添加到修订表中
。
(这可能是 SE 网站使用的,基于 SE Data Explorer 中的数据转储。也可能不是,我无法判断。)
对于这种方法,postid
也是posthistory
表中的外键,也是posts
表中的主键。
关于mysql - 如何在mysql数据库中保存所有版本的帖子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9211292/