相关疑难解决方法(0)

如何版本控制数据库中的记录

假设我在数据库中有一条记录,管理员和普通用户都可以进行更新.

任何人都可以建议一个好的方法/架构如何版本控制此表中的每个更改,以便可以将记录回滚到以前的版本.

architecture database-design

158
推荐指数
8
解决办法
6万
查看次数

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

在阅读了很多关于保持页面更改历史记录如何版本控制数据库中的记录(例如)的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)都会受到极大关注.

php mysql version-control compare database-versioning

11
推荐指数
1
解决办法
4721
查看次数

数据库行快照/修订

我正在寻找一个合适的过程来保存数据库中的行(及其关系)的修订或快照.

以电子商务平台为例 -

  • 客户创建订单.订单与帐单邮寄地址和送货地址相关联.
  • 然后,所述客户在其简档中更改其地址簿中的地址.
  • 原始订单的地址不应更改.

我看了几个概念,一个是重复的表,另一个是临时数据库,另一个是保留修订版ID和活动标志.

虽然我很欣赏没有人能真正告诉我最适合我应用的解决方案,因为这是一个容易接受意见的问题,我希望有人可能通过比较来证明优势/劣势.我已经阅读了很多关于SO的问题,以及关于各种实现的一些文章,但没有一个真正比较每个想法或指出它们最适合的地方.下面我概述了我对每个概念的理解.

重复的表

将信息存储在与需要快照的数据相关的行中.即在一个在线商店的订单表中的列中保留一个地址.

好处

  • 数据被分段为明确相关的表,不需要连接等.
  • 无需按照以下概念中的要求仅选择活动行.
  • 假设行有时间戳,则保留时态数据库的大部分好处

缺点

  • 复制
    • 模式(当多个表修订时特别有问题)
    • 使用ORM时的模型
    • 如果快照片段数据未更改并且已重新使用,则为数据.即如果订单10次,地址存储11次(订单+当前)
  • 处理相关表中插入所需的额外代码.

时间数据库/活动或当前行标志

"时间感知"的数据库行,即它们的上下文是两个日期时间之间的时间.数据可以在时间表位于时间表的上下文之间加入.

好处

  • 没有重复的架构或模型.在一个地方进行的更改.
  • ORM模型可以处理新行的创建,无缝标记为活动等.
  • 没有复制没有进行任何更改的行.即10个订单到1个地址存储地址一次.

缺点

  • 查询变得更复杂,因为连接/ where子句需要选择"活动"行.
  • 表格被历史数据堵塞,这些数据未经常选择/调用.

仅存储已更改的列,时间.

有一个表来跟踪所有表的更改并记下它所涉及的行以及它在时间方面何时有效.

好处

  • 在未经复制的未更改数据的情况下,在修订方面优化存储.

缺点

  • 将列版本与其他数据相结合,查询要复杂得多.

我已经在这里查看了以下有关SO和其他资源的问题

编辑:我没有用特定的DBMS标记这篇文章的原因,因为我希望这个概念尽可能多地与平台一起工作,目前是DBMS独立的,抽象层允许它与MySQL一起工作MSSQL但希望将来能够支持其他人.

database temporal-database

9
推荐指数
1
解决办法
1018
查看次数