我正在使用需要对文档进行版本控制的系统,例如 CMS。
用它的表为它创建数据库的最佳实践和方法是什么?
ecleel
问问题
2138 次
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 回答