在阅读了很多关于如何保留网页更改历史记录(例如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)
的值。
我的问题
- 这个工作流程看起来合适吗?因为我发现了一个错误:如果有多个
ARTICLE
的REVISION
:
- 我们应该采用最新提交的
REVISION
的内容还是原始ARTICLE
的内容? - 或者,我们需要封锁之前的修改,因为在上一个修改没有被审核之前不能提交其他的
REVISION
。
有没有一种记录轻量级版本的方法?另外,是否可以通过SQL、PHP或js比较函数只在
REVISION
表中插入更新的内容?以及如何像Stack Overflow那样显示它?因为我担心REVISION
表会很重。奖励问题:Stack Overflow是如何做到这一点的?
任何想法、链接、来源、插件(MySQL、PHP 5和JS/jQuery)都将不胜感激。