知识卡片

完整性约束的三种分类维度:对象/范围/状态

普通读书笔记卡

内容

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

参考来源

- 位置:《数据库原理(微课版)》第4章《数据库完整性》4.1节"数据库完整性 概述"(源文件:_epub-src/index_split_003.html) - 结论依据:原文明确"根据定义范围不同,完整性约束可以分为列级约束、 元组约束和表级约束……根据所涉及对象状态的不同,完整性约束又可以分为 静态约束和动态约束",与此前"根据约束条件不同的定义对象,完整性约束 又可以分为实体完整性约束、参照完整性约束和用户自定义完整性约束"并列 给出,因此可以推出这是三个可以同时描述同一条约束的正交分类维度。 - 原始内容:根据定义范围不同,完整性约束可以分为列级约束、元组约束和 表级约束……根据所涉及对象状态的不同,完整性约束又可以分为静态约束和 动态约束。静态约束是确定状态时数据应满足的条件……动态约束是指数据库 从一种状态转变为另一种状态时,新旧数据之间应满足的约束。