《数据库的完整性幻灯片.ppt》由会员分享,可在线阅读,更多相关《数据库的完整性幻灯片.ppt(17页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、数据库的完整性数据库的完整性第1页,共17页,编辑于2022年,星期六实体完整性:指主键的值不能为空或部分为空;实体完整性:指主键的值不能为空或部分为空;如如果果主主键键为为空空或或部部分分为为空空,则则失失去去了了主主键键的的唯唯一一标标识性;识性;用户自定义完整性:是针对具体应用环境,数据用户自定义完整性:是针对具体应用环境,数据必须满足的语义要求。必须满足的语义要求。注意:数据库的完整性与安全性的区别。注意:数据库的完整性与安全性的区别。数数据据库库是是否否具具备备完完整整性性关关系系到到数数据据库库系系统统能能否否真真实实地地反反映映现现实实世世界界,因因此此维维护护数数据据库库的的完
2、完整整性性是是非常重要的。非常重要的。第2页,共17页,编辑于2022年,星期六为了维护数据库的完整性,为了维护数据库的完整性,DBMS必须提供如下功能:必须提供如下功能:1.1.定义功能:定义功能:提供定义完整性约束条件的机制。提供定义完整性约束条件的机制。2.2.检检查查功功能能:检检查查用用户户发发出出的的操操作作请请求求是是否否违违背背了了完完整整性性约约束条件。束条件。完整性检查的时机:完整性检查的时机:(1 1)立立即即执执行行约约束束:在在一一条条语语句句执执行行完完后后立立即即检检查查是是否否违违背背完完整性约束。整性约束。(2 2)延迟执行约束:有时完整性检查需要延迟到整个事
3、务执行结)延迟执行约束:有时完整性检查需要延迟到整个事务执行结束后再进行,检查正确方可提交,称这类约束为延迟执行约束。束后再进行,检查正确方可提交,称这类约束为延迟执行约束。3.3.违违约约处处理理:如如果果发发现现用用户户的的操操作作请请求求使使数数据据违违背背了了完完整整性性约约束束条件,则采取一定的操作,以保证数据的完整性。条件,则采取一定的操作,以保证数据的完整性。第3页,共17页,编辑于2022年,星期六5.1 静态约束与动态约束静态约束与动态约束完整性约束条件作用的对象可以是关系、元组、列三种。列约束:主要是列的类型、取值范围、精度、排序等约束条件。元组约束:是元组中各个字段间的联
4、系的约束。关系的约束:是若干元组间、关系集合上以及关系之间的联系的约束。完整性约束条件涉及的这三类对象,其状态可以是静态的,也可以是动态的。第4页,共17页,编辑于2022年,星期六静态约束:指数据库每一确定状态时的数据对象所应满足的约束条件,它是反映数据库状态合理性的约束,这是最重要的一类完整性约束。动态约束:指数据库从一种状态转变为另一种状态时,新、旧值之间应满足的约束条件,它反映了数据库状态变迁的约束。第5页,共17页,编辑于2022年,星期六静态列级约束静态列级约束静态列级约束是对一个列的取值域的说明,这是最常用也最容易实现的一类完整性约束,包括以下几方面:1对数据类型的约束(包括数据
5、的类型、长度、单位、精度等)。2对数据格式的约束例如,规定学号的前两位表示入学年份,中间两位表示系的编号,后三位为顺序编号。出生日期的格式为:YYMMDD。第6页,共17页,编辑于2022年,星期六3对取值范围或取值集合的约束例:规定学生成绩的取值范围为0100,大学本科学生年龄的取值范围为1429,性别的取值集合为男,女4对空值的约束空值表示未定义或未知的值,它与零值和空格不同。有的列允许空值,有的则不允许。例如学生学号不能取空值,成绩可以为空值。第7页,共17页,编辑于2022年,星期六二、静态元组约束:二、静态元组约束:即规定元组的各个列之间的约束关系。例如订货关系中包含发货量、订货量等
6、列,规定发货量不得超过订货量;又如教师关系中包含职称、工资等列,规定教授的工资不低于1000元。三、静态关系约束三、静态关系约束在一个关系的各个元组之间或者若干关系之间常常存在各种联系或约束。常见的静态关系约束有:(1)实体完整性约束。(2)参照完整性约束。(3)函数依赖约束。大部分函数依赖约束都在关系模式中定义。(4)统计约束。即字段值与关系中多个元组的统计值之间的约束关系。例如规定部门经理的工资不得高于本部门职工平均工资的5倍,不得低于本部门职工平均工资的2倍。本部门职工的平均工资是一个统计值。第8页,共17页,编辑于2022年,星期六四、动态列级约束:四、动态列级约束:是修改列定义或列值
7、时应满足的约束条件;包括两方面:(1)修改列定义时的约束例:将允许空值的列改为不允许空值时,如果该列目前已存在空值,则拒绝这种修改。(2)修改列值时的约束:修改列值有时需要参照其旧值,并且新旧值之间需要满足某种约束条件。例如,职工工资调整不得低于其原来工资,学生年龄只能增长等。五、动态元组约束:五、动态元组约束:指修改元组值时,元组中各个字段间需要满足某种约束条件。例如职工工资调整时新工资不得低于原工资工龄*1.5等。第9页,共17页,编辑于2022年,星期六5.2 5.2 实体完整性的定义实体完整性的定义P1525.3 5.3 参照完整性的定义参照完整性的定义P154第10页,共17页,编辑
8、于2022年,星期六实现参照完整性要考虑的几个问题实现参照完整性要考虑的几个问题 P155 P155 表表5.15.11 1在被参照关系中删除元组的问题在被参照关系中删除元组的问题 当删除被参照关系的某个元组,而参照关系存在若干元当删除被参照关系的某个元组,而参照关系存在若干元组,其外码值与被参照关系删除元组的主码值相同,这时可组,其外码值与被参照关系删除元组的主码值相同,这时可有三种不同的策略:有三种不同的策略:(1)(1)级联删除级联删除(CASCADES)(CASCADES)将将参参照照关关系系中中所所有有外外码码值值与与被被参参照照关关系系中中要要删删除除元元组组主主码码值值相同的元组
9、一起删除。相同的元组一起删除。(2)(2)受限删除受限删除 仅仅当当参参照照关关系系中中没没有有任任何何元元组组的的外外码码值值与与被被参参照照关关系系中中要要删删除除元元组的主码值相同时,系统才执行删除操作,否则拒绝此删除操作。组的主码值相同时,系统才执行删除操作,否则拒绝此删除操作。(3)(3)置空值删除置空值删除 删除被参照关系的元组,并将参照关系中相应元组的外码值置空删除被参照关系的元组,并将参照关系中相应元组的外码值置空值。值。第11页,共17页,编辑于2022年,星期六 2 2在参照关系中插入元组时的问题在参照关系中插入元组时的问题 当参照关系插入某个元组,而被参照关系不存在相应的
10、元当参照关系插入某个元组,而被参照关系不存在相应的元组,其主码值与参照关系插入元组的外码值相同,这时可有组,其主码值与参照关系插入元组的外码值相同,这时可有以下策略:以下策略:受限插入受限插入 仅仅当当被被参参照照关关系系中中存存在在相相应应的的元元组组,其其主主码码值值与与参参照照关关系系插插入入元元组组的的外外码码值值相相同同时时,系系统统才才执执行行插插入入操作,否则拒绝此操作。操作,否则拒绝此操作。第12页,共17页,编辑于2022年,星期六3 3修改被参照表主码值的问题修改被参照表主码值的问题 (1)(1)不允许修改主码值不允许修改主码值 在在有有些些RDBMSRDBMS中中,不不允
11、允许许修修改改被被参参照照表表的的主码值。主码值。(2)(2)允许级联修改或外码值置空允许级联修改或外码值置空 在在有有些些RDBMSRDBMS中中,允允许许修修改改关关系系主主码码,但必须保证主码值与对应外码值一致。但必须保证主码值与对应外码值一致。第13页,共17页,编辑于2022年,星期六4 4外码是否允许空值的问题外码是否允许空值的问题 实实现现参参照照完完整整性性时时,系系统统除除了了应应提提供供定定义义外外码码的的机机制制,还还应应提提供供定定义义外外码码列列是是否否允许空值的机制。允许空值的机制。例例:部部门门表表与与职职工工部部门门表表,职职工工部部门门表表中中部部门门可可取取
12、空空值值;但但学学生生表表与与学学生生选课表,学生选课表,学生选课表不能取空值。选课表不能取空值。第14页,共17页,编辑于2022年,星期六5.4 用户定义的完整性用户定义的完整性 P156P159 第15页,共17页,编辑于2022年,星期六5.5用触发器实现数据的完整性用触发器实现数据的完整性1.触发器简介触发器简介 触发器是定义在表或视图上触发器是定义在表或视图上的一类特殊的子程序,用于维护表中的一类特殊的子程序,用于维护表中的数据,的数据,当有操作影响到触发器关联的数据时,触发器自动执行当有操作影响到触发器关联的数据时,触发器自动执行,例如:,例如:通过触发器维护多个表间数据的一致性
13、。一般情况下,对表数据的操作通过触发器维护多个表间数据的一致性。一般情况下,对表数据的操作有:插入、修改、删除,因而维护数据的触发器也可分为三种类型:有:插入、修改、删除,因而维护数据的触发器也可分为三种类型:INSERTINSERT、UPDATEUPDATE和和DELETEDELETE触发器。触发器。同一个表可定义多个触发器。同一个表可定义多个触发器。2.SQL SERVER触发器应用举例触发器应用举例3.Oracle 触发器举例触发器举例第16页,共17页,编辑于2022年,星期六5.6 保证数据完整性应遵循的几个原则保证数据完整性应遵循的几个原则(1)正确地设计数据库结构,选择合适的数据)正确地设计数据库结构,选择合适的数据类型。类型。(2)在程序调试阶段尽量把可能遇到的情况都)在程序调试阶段尽量把可能遇到的情况都模拟到,以检验约束规则是否正确合理。模拟到,以检验约束规则是否正确合理。(3)与系统的安全保护措施相结合。)与系统的安全保护措施相结合。(4)建立完整的系统文档。)建立完整的系统文档。第17页,共17页,编辑于2022年,星期六