第五章 数据库完整性课件

上传人:我*** 文档编号:147919060 上传时间:2020-10-14 格式:PPT 页数:54 大小:256.50KB
返回 下载 相关 举报
第五章 数据库完整性课件_第1页
第1页 / 共54页
第五章 数据库完整性课件_第2页
第2页 / 共54页
第五章 数据库完整性课件_第3页
第3页 / 共54页
第五章 数据库完整性课件_第4页
第4页 / 共54页
第五章 数据库完整性课件_第5页
第5页 / 共54页
点击查看更多>>
资源描述

《第五章 数据库完整性课件》由会员分享,可在线阅读,更多相关《第五章 数据库完整性课件(54页珍藏版)》请在金锄头文库上搜索。

1、完整性约束条件 完整性控制 FoxPro的完整性 小结,5 数据库完整性,数据库的完整性是指数据的正确性和相容性。例如,学生的学号必须唯一; 性别只能是男或女、本科学生的年龄的取值范围为1430的整数; 学生所在的系必须是学校已经开设的系等。 数据库是否具备完整性关系到数据库系统能否真实地反映现实世界,因此维护数据库的完整性是非常重要的。,5 数据库完整性,数据的完整性和安全性是两个不同的概念。 前者是为了防止数据库中存在不符合语义的数据,防止错误信息的输入和输出,即所谓垃圾进垃圾出(Garbage In Garbage Out)所造成的无效操作和错误结果。 而后者是保护数据库防止恶意破坏和非

2、法的存取。也就是说,安全性措施的防范对象是非法用户和非法操作,完整性措施的防范对象是不合语义的数据。,5.2 数据库完整性,为维护数据库的完整性,DBMS必须提供一种机制来检查数据库中的数据,看其是否满足语义规定的条件。 这些加在数据库数据之上的语义约束条件称为数据库完整性约束条件,它们作为模式的一部分存放入数据库中。 而DBMS中检查数据是否满足完整性条件的机制称为完整性检查。,5.2 数据库完整性,5.1 完整性约束条件,完整性检查是围绕完整性约束条件进行的,因此完整性约束条件是完整性控制机制的核心。 完整性约束条件作用的对象可以是关系、元组、列三种。 其中列约束条件主要是列的类型、取值范

3、围、精度、排序等约束条件。 元组的约束条件是元组中各个字段间的联系的约束。 关系的约束是若干元组间、关系集合上以及关系之间的联系的约束。,5.1 完整性约束条件,完整性约束条件涉及的这三类对象,其状态可以是静态的,也可以是动态的。 所谓静态约束是指数据库每一确定状态时的数据对象所应满足的约束条件,它是反映数据库状态合理性的约束,这是最重要的一类完整性约束。 动态约束是指数据库从一种状态转变为另一种状态时,新、旧值之间所应满足的约束条件,它反映数据库状态变迁的约束。,5.1 完整性约束条件,5.1 完整性约束条件,一、静态列级约束 静态列级约束是对一个列的取值说明,这是最常用也是最容易实现的一类

4、完整性约束。 1. 对数据类型的约束(包括数据的类型、长度、单位、精度等) 2. 对数据格式的约束 例如,规定学号的前两位表示入学年份,中间两位表示系的编号,后三位为顺序编号。,5.1 完整性约束条件,一、静态列级约束 3. 对取值范围或取值集合的约束 例如,规定学生成绩的取值范围为0100,性别的取值集合为男,女。 4. 对空值的约束 空值表示未定义或未知的值,它与零值和空格不同。有的列允许有空值,有的则不允许。例如学生学号不能取空值,成绩可以为空值。 5. 其它约束 例如关于列的排序,组合列等。,5.1 完整性约束条件,二、静态元组约束 一个元组是由若干个列值组成的,静态元组约束就是规定元

5、组的各个列之间的约束关系。 例如订货关系中包含发货量、订货量等列,规定发货量不得超过订货量; 又如教师关系中包含职称、工资等列,规定教授的工资不低于1000元。,5.1 完整性约束条件,三、静态关系约束 在一个关系的各个元组之间或者若干关系之间常常存在各种联系或约束。常见的静态关系约束有: 实体完整性约束 参照完整性约束 实体完整性约束和参照完整性约束是关系模型的两个极其重要的约束,称为关系的两个不变性。,5.1 完整性约束条件,三、静态关系约束 函数依赖约束。大部分函数依赖约束都在关系模式中定义。 统计约束。即字段值与关系中多个元组的统计值之间的约束关系。 例如规定部门经理的工资不得高于本部

6、门职工平均工资的5倍,不得低于本部门职工平均工资的2倍。,5.1 完整性约束条件,四、动态列级约束 动态列级约束是修改列定义或列值时应满足的约束条件,包括下面两方面: 修改列定义时的约束 例如,将允许空值修改成不允许空值时,如果该列目前已存在空值,则拒绝这种修改。 修改列值时的约束 修改列值有时需要参照其旧值,并且新旧值之间需要满足某种约束条件。例如,职工工资调整不得低于其原来的工资,学生年龄只能增长等。,5.1 完整性约束条件,五、动态元组约束 动态元组约束是指修改元组的值时元组中各字段间需要满足某种约束条件。例如职工工资调整时新工资不得低于原工资工龄1.5倍。 六、动态关系约束 动态关系约

7、束是加在关系变化前后状态上的限制条件,例如事务一致性、原子性等约束。,5.1 完整性约束条件,表5.1 完整性的约束条件 粒度 状态 列级 元组级 关系级 列定义 元组值 实体完整性约束 静态 类型 应满足 参照完整性约束 格式 的条件 函数依赖约束 值域 统计约束 空值 动态 改变列定 元组新旧值 关系新旧状态 义或列值 之间应满足 之间应满足的 的约束件条 约束条件,5.2 完整性控制,DBMS的完整性控制机制应具有三个方面的功能: 定义功能,提供定义完整性约束条件的机制。 检查功能,检查用户发出的操作请求是否违背了完整性约束条件。 如果发现用户的操作请求使数据违背了完整性约束条件,则采取

8、一定的动作来保证数据的完整性。,5.2 完整性控制,检查是否违背完整性约束的时机通常是在一条语句执行完后立即检查,称这类约束为立即执行约束(Immediate Constraints)。 有时完整性检查需要延迟到整个事务执行结束后再进行,检查正确方可提交,称这类约束为延迟执行约束(Deferred Constraints)。 例如银行数据库中“借贷总金额应平衡”的约束就应该是延迟执行的约束。从帐号A转一笔钱到帐号B为一个事务,从帐号A转出前后帐就不平了,必须等转入B后帐才能重新平衡,这是才能进行完整性检查。 如果发现用户操作请求违背了完整性约束条件,系统将拒绝该操作,但对于延迟的约束,系统将拒

9、绝整个事务,把数据库恢复到该事务执行前的状态。,5.2 完整性控制,一条完整性规则可以用一个五元组(D,O,A,C,P)来表示,其中: D(Data) 约束作用的数据对象; O(Operation) 触发完整性检查的数据库操作,即当用户发出什么操作请求时需要检查该完整性规则,是立即检查还是延迟检查; A(Assertion) 数据对象必须满足的断言或语义约束,这是规则的主体; C(Condition) 选择A作用的数据对象值的谓词; P(Procedure) 违反完整性规则时触发的过程。,5.2 完整性控制,例如,在“学号不能为空”的约束中 D 约束作用的对象为Sno属性 O 插入或修改Stu

10、dent元组时 A Sno不能为空 C 无(A可以作用于所有记录的Sno属性) P 拒绝执行该操作 又如,在“教授工资不得低于1000元”的约束中 D 约束作用的对象为工资Sal属性 O 插入或修改职工元组时 A Sal不能少于1000 C 职称“教授”(A仅作用于职称“教授”的记录) P 拒绝执行该操作,5.2 完整性控制,在关系数据库管理系统中,最重要的完整性约束是实体完整性和参照完整性,其它完整性约束条件则可以归入用户定义的完整性。 目前许多关系数据库管理系统都提供了定义和检查实体完整性、参照完整性和用户定义完整性的功能。 对于违反实体完整性和用户定义完整性的操作一般都采用拒绝执行的方式

11、进行处理。 而对于违反参照完整性的操作,并不都是简单地拒绝执行,有时要根据应用语义执行一些附加操作,以保证数据库的正确性。 下面我们来讨论一下关系数据库管理系统在实现参照完整性要考虑的几个问题:,5.2 完整性控制,1. 外码能否接受空值问题 例如,职工部门数据库包含职工表EMP和部门表DEPT,其中DEPT关系的主码为部门号Deptno,EMP关系的主码为职工号Empno,外码为部门号Deptno,称DEPT为被参照关系或目标关系,EMP为参照关系。 EMP中,某一元组的Deptno列若为空值,表示这个职工尚未分配到任何部门工作。这和应用环境的语义是相符的,因此EMP的Deptno列可以取空

12、值。,5.2 完整性控制,1. 外码能否接受空值问题 但在学生选课数据库中,Student关系为被参照关系,其主码为Sno。SC为参照关系,外码为Sno。若SC的Sno为空值,则表示尚不存在的某个学生,或者某个不知学号的学生,选修了某门课程,其成绩记录在Grade列中。这与学校的应用环境是不相符的,因此SC的Sno列不能取空值。 因此在实现参照完整性时,系统除了应该提供定义外码的机制,还应该提供定义外码列是否允许空值的机制。,5.2 完整性控制,2. 在被参照关系中删除元组的问题 例如要删除Student关系中Sno=95001的元组,而SC关系中又有4个元组的Sno都等于95001,一般地,

13、当删除被参照关系的某个元组,而参照关系存在的若干元组,其外码值与被删除元组的主码值相同,这时可有三种不同策略:,5.2 完整性控制,级联删除(CASCADES) 将参照关系中所有外码值与被参照关系中要删除元组主码值相同的元组一起删除。例如将上面Sc关系中4个Sno=95001的元组一起删除。如果参照关系同时又是另一个关系的被参照关系,则这种删除操作会继续级联下去。,5.2.2 完整性控制,受限删除(RESTRICTED) 仅当参照关系中没有任何元组的外码值与被参照关系中要删除元组主码值相同时,系统才执行删除操作,否则拒绝此操作。例如对于上面的情况,系统将拒绝删除Student关系中Sno=95

14、001的元组。,5.2 完整性控制,置空值删除(NULLIFIES) 删除被参照关系的元组,并将参照关系中相应元组的外码值置空。例如。例如将上面Sc关系中所有Sno= 95001的元组的Sno值置为空值。 这三种处理方法,哪一种是正确的呢?这要依应用环境的语义来定。在学生选课数据库中,显然第1种方法是对的。因为当一个学生毕业或退学后,他的个人记录从Student表中删除了,他的选课记录也应随之从SC表中删除。,5.2 完整性控制,3. 在参照关系中插入元组时的问题 例如向SC关系插入(99001,1,90)元组,而Student关系中尚没有Sno=99001的学生,一般地,当参照关系插入某个元

15、组,而被参照关系不存在相应的元组,其主码值与参照关系插入元组的外码值相同,这时可以有以下策略:,5.2 完整性控制,受限插入 仅当被参照关系中存在相应的元组,其主码值与参照关系插入元组的外码值相同时,系统才执行插入操作,否则拒绝此操作。例如对于上面的情况,系统将拒绝向SC关系插入(99001,1,90)元组。 递归插入 首先向被参照关系中插入相应的元组,其主码值等于参照关系插入元组的外码值,然后向参照关系插入元组。例如对于上面的情况,系统将首先向Student关系插入Sno=99001的元组,然后向SC关系插入(99001,1,90)元组。,4. 修改关系中主码的问题 不允许修改主码 在有些R

16、DBMS中,修改关系主码操作是不允许的,例如不能用UPDATE语句将学号95001改为95102。如果需要修改主码值,只能先删除该元组,然后再把具有新主码的元组插入到关系中。,5.2 完整性控制,允许修改主码 在有些RDBMS中,允许修改关系主码,但必须保证主码的唯一性和非空,否则拒绝修改。 当修改的关系是被参照关系时,还必须检查参照关系,是否存在这样的元组,其外码值等于被参照关系要修改的主码值。 例如要将Student关系中Sno950001的Sno值改为960123,而SC关系中有4个元组的Sno=950001,这时与在被参照关系中删除元组的情况类似,可以有:级联修改、拒绝修改、置空值修改三种策略加以选择。,5.2 完整性控制,当修改的关系是参照关系时,还必须检查被参照关系,是否存在这样的元组,其主码值等于被参照关系要修改的外码值。 例如要把SC关系中(950001,1,90)的元组修改

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号