主动数据库规则终止检测与灵活查询的数据模型
主动数据库规则终止检测
在处理主动数据库规则时,为避免排名(rank)无限制增长,可使用取模运算。例如:
next(rank) :=
case
(input = uR) : (rank + 1) mod 5;
(active = bR) : (rank + 1) mod 5;
1 : rank;
esac;
此模型无法区分排名 1、6、11 等。若应用中排名的实际值很重要,则需额外处理。比如,当排名为 1 时员工可获额外奖金,可引入变量 rankIsOne ,排名为 1 时其值为 1,否则为 0。
在建模过程中,还可采取以下优化措施:
- 消除冗余变量 :对于在应用中从不改变且对验证属性不重要的字段,可从规范中安全移除相关变量。例如,在示例中, id 、 empid 、 salary 从未在规范中使用,可移除; id 、 empid 字段从不更新,无需 oldid 、 oldempid 变量存储先前状态值。
- 缩小变量范围 :变量取值范围过大可能导致状态爆炸问题。以员工工资为例,有两种解决方案:
- 列出工资可能的取值,如 salary : {40000, 45000, 500
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



