第12讲:数据库完整性

大纲:

  1. 数据库完整性的概念及分类
  2. SQL语言实现静态(列/关系)完整性
  3. SQL语言实现动态完整性

 

一、前言

1. 数据库完整性是数据库的一种特性(在任何情况下的正确性、有效性和一致性),其由DBMS保证实现

    ①广义完整性:语义完整性、并发控制、安全控制、故障恢复

    ②狭义完整性:特指语义完整性,DBMS通常有专门的完整性管理机制与程序来处理语义完整性问题

 

2. 回顾关系模型中的三个完整性:实体完整性、参照完整性、用户自定义完整性

用户自定义完整性即是上述语义完整性,而这也是我们这讲的主题。

 

3. 本讲目的:学会把完整性约束条件施加到数据库的定义中,学会如何表达完整性约束条件。

 

二、数据库完整性概述

1. 为什么会引发数据库完整性的问题?

  • 不正当的数据库操作,如输入错误、操作失误、程序处理失误等

 

2. 数据库完整性管理的作用:

  • 防止和避免数据库中不合理数据的出现
  • DBMS应尽可能地自动防止DB中的语义不合理现象

 

3. DBMS如何自动保证数据库完整性?

  1. DBA定义完整性约束规则;
  2. 当用户请求更新数据时,DBMS将依据完整性约束规则来检查此更新是否符合规则,进而决定是否允许更新。

 

三、数据库完整性的分类

1. 按约束对象分类

  • 域完整性约束条件:施加于某一列上,对给定列上所要更新的某一候选值是否可以接受进行约束条件判断
  • 关系完整性约束条件:施加于关系(若干列)上,对给定关系上所要更新的某一候选元组是否可以接受进行约束条件判断;或是对一个关系中的若干元组和另一个关系中的若干元组间的联系是否可以接受进行约束条件判断

 

2. 按约束来源分类

  • 结构约束:来自于模型的约束,例如函数依赖约束、主键约束(实体完整性)、外键约束(参照完整性),只关心数值相等与否,是否允许空值等
  • 内容约束:来自于用户的约束,如用户自定义完整性,关心元组或属性的取值范围

 

3. 按约束状态分类

  • 静态约束:要求DB在任何时候均应满足的约束,如Sage在任何时候均应满足“大于0且小于150”
  • 动态约束:要求DB从一状态变为另一状态时应满足的约束,例如人的身高只能增加,不能减少(不可从170更改为165)

 

四、 完整性约束条件

 

 

五、用SQL语言实现静态完整性

 

相关文章