假设我在数据库中有一条记录,管理员和普通用户都可以进行更新.
任何人都可以建议一个好的方法/架构如何版本控制此表中的每个更改,以便可以将记录回滚到以前的版本.
在阅读了很多关于保持页面更改历史记录或如何版本控制数据库中的记录(例如)的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)都会受到极大关注.
我正在寻找一个合适的过程来保存数据库中的行(及其关系)的修订或快照.
以电子商务平台为例 -
我看了几个概念,一个是重复的表,另一个是临时数据库,另一个是保留修订版ID和活动标志.
虽然我很欣赏没有人能真正告诉我最适合我应用的解决方案,因为这是一个容易接受意见的问题,我希望有人可能通过比较来证明优势/劣势.我已经阅读了很多关于SO的问题,以及关于各种实现的一些文章,但没有一个真正比较每个想法或指出它们最适合的地方.下面我概述了我对每个概念的理解.
将信息存储在与需要快照的数据相关的行中.即在一个在线商店的订单表中的列中保留一个地址.
"时间感知"的数据库行,即它们的上下文是两个日期时间之间的时间.数据可以在时间表位于时间表的上下文之间加入.
有一个表来跟踪所有表的更改并记下它所涉及的行以及它在时间方面何时有效.
我已经在这里查看了以下有关SO和其他资源的问题
编辑:我没有用特定的DBMS标记这篇文章的原因,因为我希望这个概念尽可能多地与平台一起工作,目前是DBMS独立的,抽象层允许它与MySQL一起工作MSSQL但希望将来能够支持其他人.