我正在尝试为我们的 OpenEdge 数据库中的表实施行版本策略。
我想出的简单解决方案是iRowVersion
向每个表添加一个整数字段,并让写入触发器验证并递增该字段,如下所示:
TRIGGER PROCEDURE FOR WRITE OF Customer OLD BUFFER oldCustomer.
IF Customer.iRowVersion < oldCustomer.iRowVersion THEN
RETURN ERROR "RowVersion Out Of Date".
ASSIGN Customer.iRowVersion = Customer.iRowVersion + 1.
这将防止任何并发更改被覆盖,但是我不确定每行增加一个是最好的。SQL ROWVERSION 在整个数据库中递增,并且为了模拟该方法将使用序列来代替:
ASSIGN Customer.iRowVersion = NEXT-VALUE(rowVersionSequence).
在我们的大型数据库中,许多记录将发生变化,这有可能非常迅速地增加序列。每张桌子有一个序列会减少这种情况,但似乎过头了,+1 的方法让它变得简单。
为了澄清这个问题 - 最好根据行上一个版本增加行版本号,还是应该采用类似 SQL 的方法 - 使每个行版本对数据库都是唯一的。
此外,如果沿着 SQL 风格路线走,创建触发器是否需要分配初始行版本?(否则所有新的未修改记录都初始化为 0)。