本章内容提要
数据库中的数据是否具备正确,相容关系到数据库系统能否真实地反映现实世界,因此维护数据库的完整性是非常重要的 。
维护数据库
( 1) 制定 完整性约束条件
( 2) 进行 完整性检查 ( 控制 )
第十章 数据库完整性本章重点:
完整性约束条件完整性控制本章难点:
完整性约束条件完整性控制第十章 数据库完整性
数据库的完整性是指数据的正确,有效性和相容性 ( 前后一致 ) 。
完整性是对数据库存储数据的限制,是对数据的约束条件 。 对数据库存储的限制各种各样 。 如关系模式中的函数依赖,是对数据项之间相关性的一种限制 。
数据的正确,有效性可以简单的视为是对数据本身而言 。
数据的相容性可以简单的视为是对数据之间的相互关系而言 。
第十章 数据库完整性
为维护数据库的完整性,DBMS提供了一种 完整性检查 机制来检查数据库中的数据,看其是否满足语义规定的条件 。
完整性检查 ( 控制 ) 是指 DBMS用一定机制来满足规定的约束条件,是防止合法用户无意识操作造成的数据输入,输出错误 ——即垃圾进,垃圾出 ( Garbage in Garbage out )
,破坏数据的正确,有效和相容,以保证数据库中不存在不符合语义的数据 。
第十章 数据库完整性
完整性检查是围绕完整性约束条件进行的,
因此完整性约束条件是完整性控制机制的核心。
在关系模型中,最常见的是三类:
( A)实体完整性
( B)参照完整性
( C)用户定义完整性第十章 数据库完整性一、完整性约束条件分类:
( 1)完整性约束条件作用的对象:
( A)关系
( B)元组
( C)列。
其中:
( A)关系的约束是若干元组间、关系集合上以及关系之间的联系的约束。
( B)元组的约束是元组中各个字段间的联系的约束。
( C)列约束主要是列的类型、取值范围、精度、排序等的约束条件。
第十章 数据库完整性
10.1 完整性约束条件第十章 数据库完整性
10.1 完整性约束条件
( 2)完整性约束条件涉及的对象的状态:
( A)静态约束
( B)动态约束其中:
( A)静态约束是指数据库每一确定状态时的数据对象所应满足的约束条件,它是反映数据库状态合理性的约束,这是最重要的一类完整性约束。
( B)动态约束是指数据库从一种状态转变为另一种状态时新、旧值之间所应满足的约束条件,它是反映数据库状态变迁的约束。
综合上述两个方面,将完整性约束条件分为六类:
一、静态列级约束二、静态元组约束三、静态关系约束四、动态列级约束五、动态元组约束六、动态关系约束第十章 数据库完整性
10.1 完整性约束条件第十章 数据库完整性
10.1 完整性约束条件对象粒度对象状态列 元组 关系动态动态列级约束 动态元组约束 动态关系约束静态静态列级约束 静态元组 静态关系约束一、静态列级约束
静态列级约束 是对一个列的取值域的说明,
这是最常用也最容易实现的一类完整性约束。
包括以下几方面:
1,对数据类型的约束,包括数据的类型、长度、
单位、精度等
2,对数据格式的约束
3,对取值范围或取值集合的约束。
4,对空值的约束
5,其他约束第十章 数据库完整性
10.1 完整性约束条件二、静态元组约束
一个元组是由若干个列值组成的,静态元组约束 就是规定元组的各个列之间的约束关系。
第十章 数据库完整性
10.1 完整性约束条件第十章 数据库完整性
10.1 完整性约束条件三、静态关系约束
在一个关系的各个元组之间或者若干关系之间常常存在各种联系或约束。
常见的静态关系约束有:
1,实体完整性约束。
2,参照完整性约束。
实体完整性约束和参照完整性约束是关系模型的两个极其重要的约束,称为关系的两个不变性。
3,函数依赖约束。大部分函数依赖约束都在关系模式中定义。
4,统计约束。即字段值与关系中多个元组的统计值之间的约束关系。
第十章 数据库完整性
10.1 完整性约束条件四、动态列级约束
动态列级约束是修改列定义或列值时应满足的约束条件。
包括下面两方面:
1,修改列定义时的约束例如,将允许空值的列改为不允许空值时,如果该列目前已存在空值,则拒绝这种修改。
2,修改列值时的约束修改列值有时需要参照其旧值,并且新旧值之间需要满足某种约束条件。
例如,职工工资调整不得低于其原来工资,学生年龄只能增长等。
第十章 数据库完整性
10.1 完整性约束条件五、动态元组约束
动态元组约束是指修改元组的值时元组中各个字段间需要满足某种约束条件。
例如职工工资调整时新工资不得低于 原工资 +
工龄 *1.5,等等。
第十章 数据库完整性
10.1 完整性约束条件六、动态关系约束
动态关系约束是加在关系变化前后状态上的限制条件。
例如事务一致性、原子性等约束条件。
第十章 数据库完整性
10.2 完整性控制一,完整性控制机制的功能
DBMS的完整性控制机制应具有三个方面的功能:
1,定义功能 ——提供定义完整性约束条件的机制。
2,检查功能 ——检查用户发出的操作请求是否违背了完整性约束条件。
3,违约响应 ——如果发现用户的操作请求使数据违背了完整性约束条件,则采取一定的动作来保证数据的完整性。
第十章 数据库完整性
10.2 完整性控制
一个完善的完整性控制机制应该允许用户定义所有六类完整性约束条件。 它们可能非常简单,也可能极为复杂。
检查是否违背完整性约束的时机:
( A)在一条语句执行完后立即检查,我们称这类约束为立即执行约束( Immediate constraints)。
( B)完整性检查需要延迟到整个事务执行结束后再进行,检查正确方可提交,我们称这类约束为延迟执行约束( Deferred constraints)。
第十章 数据库完整性
10.2 完整性控制二、完整性规则的内容一条完整性规则可以表示为五元组 (D,O,A,C,P)
其中:
D(Data) 约束作用的 数据对象 ;
O(Operation) 触发完整性检查的数据库 操作,即当用户发出什么操作请求时需要检查该完整性规则,是立即检查还是延迟检查;
A(Assertion) 数据对象必须满足的断言或语义 约束,
这是规则的主体:
C(Condition) 选择 A作用的数据对象值的 谓词,
P(Procedure) 违反完整性规则时触发的 过程 。
第十章 数据库完整性
10.2 完整性控制
例 1:,在关系 S(Sno,Sname,Ssex,Sdept) 中
,学号不能为空,的约束中五元组 (D,O,A,
C,P)为:
D 约束作用的对象为 Sno属性 。
O 插入或修改 S元组时
A Sno不能为空
C 无 (A可作用于所有记录的 Sno属性 )
P 拒绝执行该操作第十章 数据库完整性
10.2 完整性控制例 2:,在关系 T(职工号,姓名,职称,工资 )中要求,教授工资不得低于 1000元,的约束中:
D 约束作用的对象为,工资,属性
O 插入或修改职工元组时
A,工资,不能小于 1000
C 职称 ='教授 '(A仅作用于职称 ='教授 '的记录 )
P 拒绝执行该操作第十章 数据库完整性
10.2 完整性控制例 3:对 S表中学生年龄定义完整性规则:
After Updating S.Sage;
S.Sage >= 16 and S.Sage<=30
ELSE
Do:
Set return code to,S.Sage No Right,
Reject;
End;
第十章 数据库完整性
10.2 完整性控制
在关系系统中,最重要的完整性约束是实体完整性和参照完整性,其他完整性约束条件则可以归入用户定义的完整性。
下面详细讨论实现参照完整性要考虑的几个问题,
1,外码能否接受空值问题
2,在被参照关系中删除元组的问题
3,在参照关系中插入元组时的问题
4,修改关系中主码的问题第十章 数据库完整性
10.2 完整性控制
1,外码能否接受空值问题
在实现参照完整性时,系统除了应该提供定义外码的机制,还应提供定义外码列是否允许空值的机制。
例 1:
学生( 学号,姓名,性别,专业号,年龄)
专业( 专业号,专业名)
在学生关系中的 专业号 列可以取空值。
例 2:
学生( 学号,姓名,性别,专业号,年龄)
课程( 课程号,课程名,学分)
选修( 学号,课程号,成绩)
选修关系中的 学号 列不能取空值 o
第十章 数据库完整性
10.2 完整性控制
2,在被参照关系中删除元组的问题
一般地,当删除被参照关系的某个元组,而参照关系存在若干元组,其外码值与被参照关系删除元组的主码值相同,这时可有三种不同的策略:
(1) 级联删除( CASCADES)
(2) 受限删除( RESTRICTED)
仅当参照关系中没有任何元组的外码值与被参照关系中要删除元组的主码值相同时,系统才执行删除操作,
否则拒绝此删除操作。
(3) 置空值删除( NULLIFIES)
删除被参照关系的元组,并将参照关系中相应元组的外码值置空值。
这三种处理方法,哪一种是正确的,要依应用环境的语义来定第十章 数据库完整性
10.2 完整性控制
3,在参照关系中插入元组时的问题
一般地,当参照关系插入某个元组,而被参照关系不存在相应的元组,其主码值与参照关系插入元组的外码值相同,这时可有以下策略:
( 1)受限插入仅当被参照关系中存在相应的元组,其主码值与参照关系插入元组的外码值相同时,系统才执行插入操作,否则拒绝此操作。
( 2)递归插入首先向被参照关系中插入相应的元组,其主码值等于参照关系插入元组的外码值,然后向参照关系插入元组。
第十章 数据库完整性
10.2 完整性控制
4,修改关系中主码的问题
(1) 不允许修改主码在有些 RDBMS中,修改关系主码的操作是不允许的。
(2) 允许修改主码在有些 RDBMS中,允许修改关系主码,但必须保证主码的唯一性和非空,否则拒绝修改。
第十章 数据库完整性
10.2 完整性控制
可见,DBMS在实现参照完整性时,除了要提供定义主码、外码的机制外,还需要提供不同的策略供用户选择。
选择哪种策略,要根据应用环境的要求确定。
第十章 数据库完整性
10.3 Oracle的完整性详见,P309-313
第四章 关系系统及其查询优化小结:
数据库的完整性是为了保证数据库中存储的数据是正确的 。 本章讲解了 DBMS完整性实现的机制,包括完整性约束定义机制,完整性检查机制和违背完整性约束条件时 DBMS应采取的动作等 。
完整性机制的实施会极大地影响系统性能,
因此许多 DBMS对完整性机制的支持比对安全性的支持要完也弱 。
不同的数据库产品对完整性的支持策略和支持程度是不同的 。