我正在为数据库中的数据创建版本控制.它具有存储修订,回滚和回滚回滚的功能.我正在使用的需要修改的数据库表如下:

对象
object\_chunks
object\_attributes

对象是主要对象,块是对象的分组部分,属性是块内数据的属性.属性以这种方式存储对象ID和块ID.很容易为一个对象选择所有属性,而无需对块表进行另一次JOIN.

唯一会真正改变的是属性,但是当属性改变时,受影响的块将被更新,并且每当块被更新时,对象也会被更新.现在,我想到了解决此问题的两种不同方法.


创建三个带有\_rev后缀的新表,这些表将仅存储对象的旧版本.实际对象还可以存储转速.可以这么说,我更改了三个不同的属性,这些属性跨越三个块,因此,三个新行按块,三个属性和一个对象作为修订.由于这是第一次更改,因此在实际表中,修订版ID为1,因此其修订版为2.
我只是简单地执行上述操作,但是我没有单独的表,而是将其存储在同一表中.

要注意的一件事是,总是会有修订,块的数量可以从1到100不等.虽然平均约为1-15.属性可以从0到100变化.平均值大约为30.每个属性都会改变.这些对象经过一个“阶段”,其中所有属性都必须由用户填写.填充完毕后,该对象即被存档,并且不再修改.所有对象都有一个对应的文件.因此,对象还将存储文件的当前哈希值(sha256).此哈希用于重复数据删除目的.

解决方法:

向对象表的主键添加修订ID绝对是必经之路.您可以有多个活动修订,而不必在表之间移动数据.对于多个表,您将发现编写回滚算法很难在保持完整性约束的情况下移动数据,尤其是在系统正在积极开发的情况下尤其困难.

如果修订是在人工时间内创建的,则简单的时间戳记可以用作修订ID.否则,只需使用整数作为修订版本号-我已经实现了CVS样式点缀的修订版本号,希望没有.如果以后有人要求使用此功能,则可以在单独的表中跟踪派生历史记录.

标签: mysql, row, database, revision

相关文章推荐

添加新评论,含*的栏目为必填