【问题标题】:Content Version Control内容版本控制
【发布时间】:2011-04-22 02:06:55
【问题描述】:

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

我有包含以下字段的内容表: id 主键序列号, content_id int(标识不同内容的字段), 标题 varchar, 内容长文, 版本 int 默认 '1', create_date 日期,

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

谢谢!

【问题讨论】:

  • 为什么不使用现有的版本控制系统?
  • 这里有stackoverflow.com/questions/440409/… 的帮助吗?
  • @maxim1000 我不能使用现有的 CMS,因为它不符合我的要求。我打算将控制版本放在系统的许多部分中,并带有不同的字段。

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


【解决方案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 表。

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

希望这会有所帮助...

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-07
      • 1970-01-01
      • 2022-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多