内容版本控制

时间:2011-04-20 05:15:38

标签: database version-control data-modeling content-management

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

我有内容表,其中包含以下字段: id主键序列, content_id int(用于标识不同内容的字段), title varchar, 内容文本, version int默认为'1', create_date date,

我看到有些CMS在另一个表中删除了比实际版本更新的版本,最好的方法是什么?有没有优化的方法?

谢谢!

2 个答案:

答案 0 :(得分: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表上的记录标记为DELETED(不是物理删除记录)。我在每张桌子上都有IS_DELETED列。尝试删除记录时,我将该列设置为TRUE。同样,已删除记录的副本也会进入VER_CUSTOMER表。
  6. 因此,您在该表上拥有的每个事务,在VER_CUSTOMER表中都有相应的记录,其中RECORD_ID和表的自然PK为PK。例如,如果CUSTOMER表的PK是CUST_ID。 VER_CUSTOMER的PK将是复合CUST_ID和RECORD_ID。

    希望这会有所帮助......

答案 1 :(得分:1)

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

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

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

然而,我会注意到git在版本化大型二进制文件方面并不完美,并且darc很糟糕。需要注意的事项。

相关问题