1

我刚开始一个项目,我想有一个带有版本控制的小型内容管理器。但是我不知道建模数据库的最佳方法是什么。

我有包含以下字段的内容表:id 主键序列,content_id int(标识不同内容的字段),title varchar,content longtext,version int default '1',create_date date,

我已经看到一些 CMS 将另一个表中的修订分开而不是实际修订,最好的方法是什么?有没有优化的方法?

谢谢!

4

2 回答 2

1

我设计了这样的东西,这是它的要点;

  1. 我为每个想要进行行级版本控制的表创建镜像表。假设您有 CUSTOMER 表。您的镜像版本控制表将为 VER_CUSTOMER
  2. 我想要进行行级版本控制的每个表都有一个名为 RECORD_ID (GUID) 的列
  3. 当一条记录插入该表时,我会生成新的 GUID 并填充该字段。新记录也插入到 VER_CUSTOMER 表中,其中 RECORD_ID 添加到表的自然 PK 中。
  4. 更新记录后,我再次生成新的 GUID。使用这个新的 GUID 填充 RECORD_ID。更新的记录也进入 VER_CUSTOMER 表。
  5. 删除记录时,我将 CUSTOMER 表上的记录标记为已删除(不是物理删除记录)。我在每张桌子上都有 IS_DELETED 列。当尝试删除记录时,我将该列设置为 TRUE。再次删除记录的副本也进入 VER_CUSTOMER 表。

因此,您在该表上的每个事务,您在 VER_CUSTOMER 表中都有一条相应的记录,其中 RECORD_ID 和表的自然 PK 作为 PK。例如,如果 CUSTOMER 表的 PK 是 CUST_ID。VER_CUSTOMER 的 PK 将是复合 CUST_ID 和 RECORD_ID。

希望这可以帮助...

于 2011-04-21T14:50:06.073 回答
1

这已经存在,没有数据库:

  • gitit(用 Haskell 编写,使用 git 或 darcs 作为后端)
  • ikiwiki(用 Perl 编写,可以使用各种版本控制系统作为后端)

它们都是开源的,并且都具有插件架构,因此可以根据您的特定需求进行定制。(但是,我只使用过 gitit。)

然而,我会注意到 git 在对大型二进制文件进行版本控制方面并不完美,而且 darcs 在这方面很糟糕。有什么要注意的。

于 2011-04-21T15:57:36.263 回答