知识卡片
完整性约束的三种分类维度:对象/范围/状态
内容
完整性约束不是只有[[实体完整性参照完整性用户自定义完整性三层约束体系]] 这一种分类方式,还可以从另外两个正交的维度切分,三个维度回答的是不同 问题,可以同时用来描述同一条约束。按”约束的是什么范围的数据”分:列级 约束只管单个属性内部(类型、格式、取值范围、是否允许空值),元组约束 管的是同一条记录里多个属性取值之间要满足的关系(比如”结束日期必须晚于 开始日期”这类涉及同一行多列的条件),表级约束管的是表内多条记录之间、 或多张表的关系集合之间的约束(如主码的唯一性本质上是表级约束,因为 “不重复”这个判断必须跟表里其他行比较)。按”约束的是静止状态还是变化 过程”分:静态约束描述数据在任意一个确定时刻应该满足的条件(如年龄非 负),动态约束描述数据从一个状态变到另一个状态时,新旧值之间必须满足 什么关系(如”员工的工资只能上调不能下调”这种约束新旧值同时成立才能 判断是否违反)。三个维度并不互斥:同一条”CHECK约束年份在1701到2100 之间”的规则,按对象分属于用户自定义完整性,按范围分是列级约束,按状态 分是静态约束——完整刻画一条约束需要同时说明它在这三个维度上各自的位置, 只说一个维度是不完整的。
参考来源
- 位置:《数据库原理(微课版)》第4章《数据库完整性》4.1节"数据库完整性
概述"(源文件:_epub-src/index_split_003.html)
- 结论依据:原文明确"根据定义范围不同,完整性约束可以分为列级约束、
元组约束和表级约束……根据所涉及对象状态的不同,完整性约束又可以分为
静态约束和动态约束",与此前"根据约束条件不同的定义对象,完整性约束
又可以分为实体完整性约束、参照完整性约束和用户自定义完整性约束"并列
给出,因此可以推出这是三个可以同时描述同一条约束的正交分类维度。
- 原始内容:根据定义范围不同,完整性约束可以分为列级约束、元组约束和
表级约束……根据所涉及对象状态的不同,完整性约束又可以分为静态约束和
动态约束。静态约束是确定状态时数据应满足的条件……动态约束是指数据库
从一种状态转变为另一种状态时,新旧数据之间应满足的约束。