为CMS等版本控制系统创建数据库的最佳实践

时间:2009-01-31 12:48:32

标签: database versioning

我正在使用像CMS那样需要对文档进行版本控制的系统 什么是为它创建数据库的最佳实践和方法,以及它的表格如何?

5 个答案:

答案 0 :(得分:4)

我首先看看他们的开源项目MediaWiki did it如何运行维基百科。他们都是关于版本化的。

答案 1 :(得分:2)

我更喜欢以与第一次添加的帖子相同的方式存储新的(新版本),但我有一个名为“childOf”的列,它存储父帖子的ID,查询看起来像什么像:

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

答案 2 :(得分:1)

当我这样做的时候,我发现它的表结构很好:

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

可以更改的字段应该进入修订表(例如内容),不会出现在posts表中的内容(postid,category等)。

从我在上一次播客中听到的内容,StackOverflow做了类似的事情。

答案 3 :(得分:1)

根据我的经验,最好有两个不同的表,一个不需要版本化的数据,另一个带有需要版本化的数据(正如Spikolynn在他/她之前的回答中所说)。

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

答案 4 :(得分:0)

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

假设您有帖子:

id, revision, name, content 

修订版将是:

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

然后将您的其他表链接到修订版ID-publish而不是id。请记住将其编入索引:)