我正在为数据库中的数据创建修订控制。它将能够存储修订,回滚和回滚回滚。我正在使用的数据库表需要修改如下:
对象
object_chunks
OBJECT_ATTRIBUTES
对象是主要对象,块是对象的分组,属性是块内数据的属性。属性存储对象ID以及块ID,方式可以轻松选择对象的所有属性,而无需对块表进行另一次JOIN。
唯一真正改变的是属性,但是当属性发生变化时,受影响的块将被更新,并且每当更新块时,对象也会更新。现在我想到了解决这个问题的两种不同方法。
有一点需要注意的是,总会有修改,块的数量可以从1到100+不等。虽然平均值在1-15左右。属性可以在0到100+之间变化。平均值可能在30左右。每个属性都会改变。这些对象进入“阶段”,其中所有属性必须由用户填写。一旦它们被填满,该对象就会被存档,并且永远不会被再次修改。所有对象都有相应的文件。所以对象也会存储文件的当前哈希值(sha256)。此哈希用于重复数据删除。
答案 0 :(得分:3)
将修订版ID添加到对象表的主键中绝对是可行的方法。您可以拥有多个活动修订版,而不必在表之间移动数据。使用多个表,您会发现很难编写回滚算法来移动数据,同时保持完整性约束 - 如果系统处于活动开发状态,则尤其困难。
如果在人工时创建修订版,则简单时间戳可以用作修订版ID。否则只需使用整数作为修订号 - 我已经实现了CVS样式的点缀修订号,并希望我没有。如果人们稍后要求使用该功能,您可以在单独的表中跟踪派生历史记录。
答案 1 :(得分:0)
怎么样
objects object_chunks revision object_attributes
如果修订版本的数量不断增加,您可以简单地选择具有按对象进行最大(修订)分组的对象,以及将来的object_chunks。