2

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

4

5 回答 5

4

我会先看看MediaWiki在他们运行 Wikipedia 的开源项目中是如何做到的。它们都是关于版本控制的。

于 2009-01-31T12:52:17.260 回答
2

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

SELECT * FROM posts WHERE condition=value ORDER BY childOf DESC;
于 2009-01-31T13:14:03.647 回答
1

当我这样做时,我发现拥有如下表结构效果很好:

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

可以更改的字段应该进入修订表(例如内容),不会进入帖子表的内容(postid、类别等)。

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

于 2009-01-31T12:53:26.667 回答
1

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

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

于 2010-02-11T19:01:38.690 回答
0

Chukc,您可以通过添加一个额外的字段并将其用作 foreignKey 来解决该问题

假设您有帖子:

id, revision, name, content 

修订将是:

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

然后,您将其他表链接到修订 id-publish 而不是 id。只要记住索引它:)

于 2010-07-18T11:35:36.370 回答