题库系统集成项目管理工程师

系统集成项目管理工程师 · 第三版 · 第4章 信息系统架构

单次涨价不得超过原价10%,为什么是动态约束?

18 道章节练习题
单选题4.7 安全架构15 / 18

商品价格均为正数。业务要求一次更新后的价格,不得超过该次更新前价格的110%;不比较其他字段或其他商品。按教材分类,这项要求属于()。

选择答案
未作答
答案与解析

正确答案 A

同样一个新价格,是否允许取决于更新前是多少。规则约束单个价格列的状态变化,所以是列级动态约束,选A。只检查新价格大于0,无法判断本次涨幅有没有超过10%。

从100改为110刚好到上限,改为111则违反规则;但从105改为111,涨幅又在允许范围内。这组对照说明,新值111本身不是判断的全部依据。教材给出动态约束通常由应用实现的思路,也列出触发器等实现手段,因此不要背成数据库绝不能实现动态规则。真正落地时,读取旧值、比较和更新还要具备合适的事务及并发保护,不能让中间一次并发改价使原先的判断失效。

选项分析

A
范围限定在单个价格列,判断依赖更新前与更新后两个值,满足列级动态约束的特点。
B
当前值为正之类的规则可只看新状态,但本题还需旧价格作比较,因此不能归为静态。
C
本题没有比较同一行中的多个不同字段,而且依赖前后状态,这个选项在范围和状态维度都不贴切。
D
没有涉及不同商品记录之间或整个关系的约束,只在同一个商品的价格变化上进行判断。

容易混淆的地方

把“价格是一个数值字段”直接等同于静态范围检查,漏掉“相对于本次更新前”的限定。

再巩固一步

  • 用同一个新值配两个不同旧值试一试:若判定可能不同,就要认真检查是否属于动态约束。
原创章节练习题 · 第三版 · 《系统集成项目管理工程师教程》第3版 · 4.7.5 · 纸书第185、186页

练习小结

题目纠错

未发送。正式接收渠道尚未接通。

查看纠错信息