数据库完整性
一. 概述
1. 定义
数据库完整性是指 DBMS 应保证的 DB 的一种特性,即在任何情况下的正确性,有效性,一致性。
- 广义完整性:语义完整性,并发控制,安全控制,DB 故障恢复等
- 狭义完整性:专指语义完整性,DBMS 通常有专门的完整性管理机制与程序来处理语义完整性的问题
2. 关系模型中有完整性定义要求:
- 实体完整性
- 参照完整性
- 用户自定义完整性
3. 引发完整性约束的原因
- 不正当的数据库操作,如输入错误,操作失误,程序处理失误等
4. 数据库完整性管理的作用
- 防止和避免数据库中不合理数据的出现
- DBMS 应尽可能地防止 DB 中语义不合理现象
- 如果 DBMS 不能自动防止,则需要应用程序员和用户在进行数据库操作时处处加以小心,每写一条 SQL 语句都要考虑是否符合语义完整性,这种工作负担很沉重,因此要尽可能多地让 DBMS 来承担
5. DBMS 自动保证完整性的方法
- DBMS 允许用户定义一些完整性约束规则(用 SQL-DDL 来定义)
- 当有 DB 更新操作时,DBMS 自动按照完整性约束条件进行检查,以确保更新操作符合语义完整性
6. 完整性约束条件(完整性约束规则)一般形式
Integrity Constraint ::= (O, P, A, R)
- O:数据集合:约束的对象?
列,多列(元组),元组集合 - P:谓词条件:什么样的约束?
- A:触发条件:什么时候检查?
- R:响应动作:不满足时怎么办?
二. 数据库完整性分类
1. 按约束对象分类
a. 域完整性约束条件
施加于某一列上,对给定列上所要更新的某一候选值是否可以接受进行约束条件判断,这是孤立进行的
b. 关系完整性约束条件
施加于关系/table 上,对给定 table 上所要更新的某一候选元组是否可以接受进行约束条件判断,或是对一个关系中的若干元组和另一个关系中的若干元组间的联系是否可以接受进行约束条件判断
2. 按约束来源分类
a. 结构约束
来自于模型的约束,例如函数依赖约束,主键约束(实体完整性),外键约束(参照完整性),只关心数值相等与否,是否允许空值等
b. 内容约束
来自用户的约束,如用户自定义完整性,关心元组或属性的取值范围。
例如 Student 表的 Sage 属性值在 15 岁至 40 岁之间等
3. 按约束状态分类
a. 静态约束
要求 DB 在任一时候均应满足的约束
例如 Sage 在任何时候都应该大于 0
b. 动态约束
要求 DB 从一状态变为另一状态时应满足的约束
例如工资只能提升不能降:工资可以是 800,也可以是 1000,可以从 800 更改为 1000,但不能从 1000 更改为 800
4. SQL 语言支持的约束
静态约束
- 列完整性----域完整性约束
- 表完整性----关系完整性约束
动态约束
- 触发器