Val*_*lky 11 php mysql version-control compare database-versioning
在阅读了很多关于保持页面更改历史记录或如何版本控制数据库中的记录(例如)的SO问题之后,我找不到真正优雅的解决方案来完成工作.
现在,让我们尝试尽可能清楚地解释我们需要什么,对于这个简单的修订系统,允许注册用户发布一些文章,其他用户提交那些文章的修订版,然后一些版主用户检查那些修订版.
MySQL数据库
该数据库包含一个文章表,其中包含以下简化字段:
ARTICLE(id, id_user, title, content, date);
Run Code Online (Sandbox Code Playgroud)
要实现修订/历史版本,我想我们将有下表:
REVISION(id, id_article, revision_id_user, id_moderator, revision_date,
revision_title, revision_content, revision_description, revision_check);
Run Code Online (Sandbox Code Playgroud)
与关系: ARTICLE 0,n <---> 1,1 REVISION
工作流程
用户创建一个ARTICLE,它被插入ARTICLE表中(太棒了!)
另一个用户对此进行了更新ARTICLE,此更新记录在REVISION表中,并为主持人用户排队.(revision_check=0).
主持人用户验证REVISION(revision_check=1),然后ARTICLE(content)获取REVISION(revision_content)值.
我的问题
这个工作流程似乎是一个很好的方法吗?因为,我看到一个错误:如果有几个REVISIONs ARTICLE:
REVISION还是原始内容ARTICLE?REVISION在未检查最后一个时,不能提交其他内容.有没有办法记录轻型版本?那么,是否可以REVISION通过SQL,PHP或js比较函数在表中插入更新的内容?如何像SO一样显示它呢?因为我担心REVISION桌子会很重.
额外奖励:怎么样?
任何想法,链接,源代码,插件(MySQL,PHP 5和JS/Jquery)都会受到极大关注.
小智 7
由于您的个性化工作流程,我没有看到针对您的问题的插件的单一答案.
关于修订工作流程
这是你自己对它的看法,它对你的使用来说似乎并不太糟糕.但我确信一些用例应该顺便发展.
我可以看到的第一点是,您必须锁定修订版,直到修订版正在进行中,直到主持人验证它为止.正在进行添加时ARTICLE(revision=progress),例如,锁定它,并避免用户通过显示消息同时编辑文章.
第二点,要小心,我相信文章的作者可以在没有任何审核过程的情况下更新它.出于这个原因,你必须设置它ARTICLE(revision=progress),而作者更新他自己的文章.
关于在db中记录修订版的轻量版本
您可以在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'),
...);
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,在数据库中创建,格式化和记录这些内容可能非常糟糕且难以管理.
我认为没有办法用MySQL进行版本控制.您可以使用像PROPEL这样的ORM进行版本控制,但我不认为结果会像您期望的那样......
在这里,更好的方法似乎是为每个修订记录整个更新的文章,即使它增长了你的数据库.使用您的工作流程,您不会阅读很多REVISION表,因此MySQL不会有很大的负担.
关于比较显示
你可以使用Diff-Match-Patch插件来浏览两个内容之间的更新,这里的"差异"演示.我认为SO使用Beyond比较(或类似)修订之间的hilight变化.
要阅读有关SO技术的更多信息,您可以查看此页面.
| 归档时间: |
|
| 查看次数: |
4721 次 |
| 最近记录: |