如何为用户发布的内容创建版本控制/历史记录/修订系统?

15

在阅读了很多关于如何保留网页更改历史记录(例如Keeping page changes history)或版本控制数据库记录的SO问题(例如How to version control a record in a database),我无法找到真正优雅的解决方案来完成这项工作。

现在,让我们尽可能清楚地解释一下我们需要什么,对于这个简单的修订系统,允许注册用户发布一些文章,其他用户提交这些文章的修订,然后一些审核人员用户检查这些修订。

MySQL数据库

数据库包含一个文章表,具有以下简化字段:

ARTICLE(id, id_user, title, content, date);
为了实现修订/历史版本,我想我们需要以下表格:
REVISION(id, id_article, revision_id_user, id_moderator, revision_date, 
         revision_title, revision_content, revision_description, revision_check);

根据关系:ARTICLE 0,n <---> 1,1 REVISION

工作流程

  • 用户创建一个ARTICLE,它被插入到ARTICLE表中。(太棒了!)

  • 另一个用户更新这个ARTICLE,此更新将记录在REVISION表中,并排队等待审核人员审查(revision_check=0)。

  • 审核员审核REVISION(revision_check=1),然后ARTICLE(content)使用REVISION(revision_content)的值。

我的问题

  • 这个工作流程看起来合适吗?因为我发现了一个错误:如果有多个ARTICLEREVISION
  • 我们应该采用最新提交的REVISION的内容还是原始ARTICLE的内容?
  • 或者,我们需要封锁之前的修改,因为在上一个修改没有被审核之前不能提交其他的REVISION
  • 有没有一种记录轻量级版本的方法?另外,是否可以通过SQL、PHP或js比较函数只在REVISION表中插入更新的内容?以及如何像Stack Overflow那样显示它?因为我担心REVISION表会很重。

  • 奖励问题:Stack Overflow是如何做到这一点的?

任何想法、链接、来源、插件(MySQL、PHP 5和JS/jQuery)都将不胜感激。

1个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
10

我没有看到有一个插件可以回答你的问题,因为这是你个性化的工作流程。

关于修订工作流程

这是你自己的想法,对你的使用来说似乎不太糟糕。但我相信一些用例必须通过某种方式进行改进。

我能看到的第一个要点是,在修订正在进行且经过审核员验证之前,您必须锁定修订。例如,当它正在进行中时,添加ARTICLE(revision=progress)以锁定它,并通过显示消息避免用户同时编辑文章。

第二点,请注意,我认为文章的作者可以在没有任何审核过程的情况下更新文章。因此,在作者更新自己的文章时,您也必须设置ARTICLE(revision=progress)

关于在数据库中记录修订的轻量级版本

您可以在php(或其他语言)中创建一个疯狂的函数,为每个更改创建一个数组,如下所示:

array('1'=>array('char_pos'=>'250','type'=>'delete','length'=>'25','change'=>''),
'2'=>array('char_pos'=>'450','type'=>'insert','length'=>'16','change'=>'some text change'),
...);
如您所见,创建、格式化并将其记录在数据库中可能非常困难且难以管理。 我认为在MySQL中没有版本控制的方法。您可以使用类似PROPEL的ORM来进行版本控制,但我不认为结果会是您期望的... 在这里,更好的方法似乎是为每个修订版本记录整个更新后的文章,即使它会增加您的数据库大小。由于您的工作流程,您不会频繁读取REVISION表,因此MySQL对其的负载不会很重。 关于比较显示 您可以使用Diff-Match-Patch插件来突出显示两个内容之间的更新,"差异"演示在此处。我认为SO使用Beyond compare(或类似工具)来突出显示修订版本之间的更改。 要了解更多有关SO技术的信息,您可以查看此页面

1
非常感谢您的建议和提供的链接。期待其他成员的观点,如果没有的话,我会查看您的答案。谢谢! - Valky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,