知识卡片
域约束通过集中定义换取约束修改的可维护性
内容
域是”带完整性约束的可复用数据类型”,价值不在于它本身能表达什么新的 约束能力(非空/唯一/CHECK约束本身在字段上直接定义也能做到),而在于 它解决了约束分散带来的维护问题:如果同一种约束(比如”学位只能是学士/ 硕士/博士”)被多张表的多个字段各自重复定义一遍,将来这条业务规则一旦 变化(比如新增”博士后”这个学位),就要逐个找到所有定义了这条约束的 字段并逐一修改,容易遗漏、也容易改出不一致的版本。把这条约束抽成一个 域(如degreeLevel),所有需要它的字段都直接引用这个域而不是重新定义 约束,规则变化时只需要修改域本身的定义一处,所有引用它的字段自动跟着 生效。这跟软件工程里”消除重复、单一数据源”的思路是同一个原理在数据库 约束层面的体现——约束定义本身也是一种需要维护的”代码”,重复定义带来 的维护成本和重复实现业务逻辑是一样的问题。
参考来源
- 位置:《数据库原理(微课版)》第4章《数据库完整性》4.5节"域的定义与
约束"(源文件:_epub-src/index_split_003.html)
- 结论依据:原文明确"域可当作带完整性约束的数据类型来定义表中的属性
或变量。使用域的优点在于当需要修改完整性约束时,仅需修改域上的约束,
而不需要逐个修改属性或变量的定义",因此可以推出域的核心价值是集中
维护约束定义、降低重复定义带来的一致性风险。
- 原始内容:域可当作带完整性约束的数据类型来定义表中的属性或变量。
使用域的优点在于当需要修改完整性约束时,仅需修改域上的约束,而不
需要逐个修改属性或变量的定义。