2009-01-31 81 views

回答

4

我会先看看MediaWiki did it在运行维基百科的开源项目中。他们都是关于版本控制。

+1

链接已损坏:MediaWiki的最新数据库架构位于:https://upload.wikimedia.org/wikipedia/commons/9/94/MediaWiki_1.28.0_database_schema.svg – eduludi 2017-04-19 12:19:49

1

当我这样做,一旦我发现它运作良好,有一个像表结构:即可以改变应该进入修订表(例如内容)

tbl.posts 
    postid(PK) | title | category 
tbl.revisions 
    revisionid(PK) | postid(FK) | authorid(FK) | content | date 

场,事情不会去在帖子表(postid,类别等)中。

从我听到的最后一个播客中看到,StackOverflow做了类似的事情。

2

我更喜欢在第一次添加新帖子的时候以相同的方式存储新的(新版本),但是我有一个名为“childOf”的列,它存储父帖子的ID,查询外观是这样的:

SELECT * FROM posts WHERE condition=value ORDER BY childOf DESC; 
+1

添加“LIMIT 1”,如果你只想要最近的结果。 – UnkwnTech 2009-01-31 14:23:31

1

以我的经验,最好是有两个不同的表用一个不需要进行版本的数据,而另一个与需要进行版本(如Spikolynn中说,他的数据/她以前的回答)。

我只使用一个表时发现的问题是,如果其他表具有指向该版本化表的外键,因为每次更新记录时主键都会更改,则引用将丢失。这导致非常复杂和低效的查询以恢复数据。

0

Chukc,你可以做些什么来解决这个问题是通过添加额外的字段,用其作为外键

比方说,你有帖子:

id, revision, name, content 

修订为:

id-publish or id-draft or id-revision-N 

然后,您将您的其他表格链接到修订版id发布而不是id。请记住索引:)