《第六章 数据保护 - 完整性6.2.ppt》由会员分享,可在线阅读,更多相关《第六章 数据保护 - 完整性6.2.ppt(58页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、6.2数据完整性控制数据完整性控制6.2.1数据完整性控制的基本概念数据完整性控制的基本概念n数据库的完整性数据库的完整性n数据的数据的正确性正确性、相容性相容性和和有效性有效性n防止不合语义的数据进入数据库防止不合语义的数据进入数据库例:学生的年龄必须是整数,取值范围为例:学生的年龄必须是整数,取值范围为14-29;n学生的性别只能是男或女学生的性别只能是男或女n学生的学号一定是唯一的学生的学号一定是唯一的n学生所在的系必须是学校开设的系学生所在的系必须是学校开设的系n数据库是否具备完整性关系到数据库系统能否数据库是否具备完整性关系到数据库系统能否真真实实地反映现实世界。地反映现实世界。n维
2、护数据库的完整性是非常重要的。维护数据库的完整性是非常重要的。n数据的完整性和安全性是两个不同的概念,密切数据的完整性和安全性是两个不同的概念,密切相关。相关。n完整性完整性n防止数据库中存在不符合语义的数据,防止防止数据库中存在不符合语义的数据,防止错误信息的输入和输出错误信息的输入和输出n防范对象是不合语义的数据防范对象是不合语义的数据n安全性安全性n保护数据库防止恶意的破坏和非法的存取保护数据库防止恶意的破坏和非法的存取n防范对象是非法用户和非法操作防范对象是非法用户和非法操作nDBMS必须提供一种机制来检查数据库中的数据,必须提供一种机制来检查数据库中的数据,看其是否满足语义规定的条件
3、。看其是否满足语义规定的条件。n完整性控制机制完整性控制机制1.完整性约束条件定义机制完整性约束条件定义机制2.完整性检查机制完整性检查机制3.违约反应违约反应1、完整性约束条件定义、完整性约束条件定义n完整性约束条件:数据模型的组成部分,约束数完整性约束条件:数据模型的组成部分,约束数据库中数据的据库中数据的语义语义。nDBMS应提供定义数据库完整性约束条件应提供定义数据库完整性约束条件(即数据即数据上的语义约束条件上的语义约束条件),并把它们作为模式的一部分,并把它们作为模式的一部分存入数据库中存入数据库中2、完整性检查机制、完整性检查机制n检查用户发出的操作请求是否违背了完整性约束检查用
4、户发出的操作请求是否违背了完整性约束条件。条件。3、违约反应、违约反应n如果发现用户的操作请求使数据违背了完整性约如果发现用户的操作请求使数据违背了完整性约束条件,则采取一定的束条件,则采取一定的动作动作来保证数据的完整性。来保证数据的完整性。6.2.2完整性约束条件完整性约束条件n整个完整性控制都是围绕完整性约束条件进行的整个完整性控制都是围绕完整性约束条件进行的n完整性约束条件是完整性控制机制的完整性约束条件是完整性控制机制的核心核心n完整性约束条件作用的对象完整性约束条件作用的对象n对象对象n列列n对属性的取值类型、范围、精度等的约对属性的取值类型、范围、精度等的约束条件束条件n元组元组
5、n对元组中各个属性列间的联系的约束对元组中各个属性列间的联系的约束n关系关系n对若干元组间、关系集合上以及关系之对若干元组间、关系集合上以及关系之间联系的约束间联系的约束n对象的状态对象的状态n静态静态n静态约束:数据库每一确定状态时的数据对象所静态约束:数据库每一确定状态时的数据对象所应满足的约束条件。应满足的约束条件。n对静态对象的约束是反映数据库状态对静态对象的约束是反映数据库状态合理性合理性的约的约束束n动态动态n动态约束:数据库从一种状态转变为另一种状态动态约束:数据库从一种状态转变为另一种状态时,新、旧值之间所应满足的约束条件。时,新、旧值之间所应满足的约束条件。n对动态对象的约束
6、是反映数据库状态对动态对象的约束是反映数据库状态变迁变迁的约束的约束n完整性约束条件分类,六类完整性约束条件完整性约束条件分类,六类完整性约束条件n静态列级约束静态列级约束n静态元组约束静态元组约束n静态关系约束静态关系约束n动态列级约束动态列级约束n动态元组约束动态元组约束n动态关系约束动态关系约束1.静态列级约束静态列级约束n静态列级约束:对的取值域的说明。静态列级约束:对的取值域的说明。n最常见、最简单、最容易实现的一类完整性约束最常见、最简单、最容易实现的一类完整性约束n五类静态列级约束五类静态列级约束1)数据类型约束数据类型约束n数据的类型、长度、单位、精度等数据的类型、长度、单位、
7、精度等例:学生姓名的数据类型为字符型,长度为例:学生姓名的数据类型为字符型,长度为82)对数据格式的约束对数据格式的约束例:学号:前两位表示入学年份,后四位为顺序编例:学号:前两位表示入学年份,后四位为顺序编号号出生日期:出生日期:YY.MM.DD。3)取值范围或取值集合的约束取值范围或取值集合的约束例:规定成绩的取值范围为例:规定成绩的取值范围为0-100年龄的取值范围为年龄的取值范围为14-29性别的取值集合为性别的取值集合为男男,女女4)对空值的约束对空值的约束n空值表示未定义或未知的值空值表示未定义或未知的值n空值与零值和空格不同空值与零值和空格不同n有的列允许空值,有的则不允许,如成
8、绩可为有的列允许空值,有的则不允许,如成绩可为空值空值5)其他约束其他约束例:关于列的排序说明,组合列等例:关于列的排序说明,组合列等2.静态元组约束静态元组约束n规定元组的各个列之间的约束关系。规定元组的各个列之间的约束关系。例:订货关系中发货量例:订货关系中发货量=700元元n静态元组约束只局限在元组上静态元组约束只局限在元组上3.静态关系约束静态关系约束n关系的各个元组之间或若干关系之间存在的各种关系的各个元组之间或若干关系之间存在的各种联系或约束联系或约束n常见静态关系约束常见静态关系约束1)实体完整性约束实体完整性约束2)参照完整性约束参照完整性约束3)函数依赖约束函数依赖约束4)统
9、计约束统计约束n函数依赖约束函数依赖约束n关系字段间存在的函数依赖关系字段间存在的函数依赖例:在学生课程教师关系例:在学生课程教师关系SJT(S,J,T)的函数依赖:的函数依赖:(S,J)T,TJ)主码:主码:(S,J)n统计约束统计约束n定义某个字段值与一个关系中多个元组的定义某个字段值与一个关系中多个元组的统计值统计值之之间的约束关系间的约束关系例:例:职工平均工资职工平均工资的的2倍倍=部门经理的工资部门经理的工资=原来工资原来工资年龄只能增长年龄只能增长5.动态元组约束动态元组约束n修改元组值:各个修改元组值:各个字段之间字段之间要满足的约束条件要满足的约束条件例:职工工资调整不得低于
10、其原来工资例:职工工资调整不得低于其原来工资+工龄工龄*1.56.动态关系约束动态关系约束n关系变化前后状态上的限制条件。关系变化前后状态上的限制条件。例:事务一致性、原子性等约束条件例:事务一致性、原子性等约束条件完整性约束条件小结完整性约束条件小结粒粒度度状态状态列列级级元元组组级级关关系系级级静静态态列定义列定义类型类型格式格式值域值域空值空值元元组组值值应应满满足足的的条件条件实体完整性约束实体完整性约束参照完整性约束参照完整性约束函数依赖约束函数依赖约束统计约束统计约束动动态态改变列定义改变列定义或列值或列值元组新旧值之间应元组新旧值之间应满足的约束条件满足的约束条件关系新旧状态间应
11、关系新旧状态间应满足的约束条件满足的约束条件6.2.3完整性控制完整性控制一、一、DBMS的完整性控制机制的完整性控制机制nDBMS的完整性控制机制应具有的功能的完整性控制机制应具有的功能n定义功能定义功能n提供定义完整性约束条件的机制提供定义完整性约束条件的机制n检查功能检查功能n检查用户发出的操作请求是否违背了完整检查用户发出的操作请求是否违背了完整性约束条件性约束条件n违约反应违约反应n如发现用户的操作请求使数据违背了完整如发现用户的操作请求使数据违背了完整性约束条件,则采取一定的动作来保证数性约束条件,则采取一定的动作来保证数据的完整性。据的完整性。1.定义功能定义功能n一个完善的完整
12、性控制机制应该允许用户定义一个完善的完整性控制机制应该允许用户定义各类各类完整性约束条件。完整性约束条件。2.检查功能检查功能n立即执行的约束立即执行的约束(Immediateconstraints)n语句执行完后立即检查是否违背完整性约束语句执行完后立即检查是否违背完整性约束n延迟执行的约束延迟执行的约束(Deferredconstrainsts)n完整性检查延迟到整个事务执行结束后进行完整性检查延迟到整个事务执行结束后进行例:银行数据库中例:银行数据库中“借贷总金额应平衡借贷总金额应平衡”的约束的约束n应该是延迟执行的约束应该是延迟执行的约束n从账号从账号A转一笔钱到账号转一笔钱到账号B为
13、一个事务,从账号为一个事务,从账号A转出去钱后账就不平了,必须等转入账号转出去钱后账就不平了,必须等转入账号B后后账才能重新平衡,这时才能进行完整性检查。账才能重新平衡,这时才能进行完整性检查。3.违约反应违约反应n拒绝该操作拒绝该操作n其他处理方法其他处理方法n完整性规则五元组表示完整性规则五元组表示:(D,O,A,C,P)nD(Data)约束作用的数据对象;约束作用的数据对象;nO(Operation)触发完整性检查的数据库操作触发完整性检查的数据库操作n用户发出什么操作请求时需要检查该完整性规则用户发出什么操作请求时需要检查该完整性规则n是立即检查还是延迟检查是立即检查还是延迟检查nA(
14、Assertion)数据对象必须满足的断言或语义数据对象必须满足的断言或语义约束,是规则的主体约束,是规则的主体nC(Condition)选择选择A作用的数据对象值的谓词作用的数据对象值的谓词nP(Procedure)违反完整性规则时触发的过程违反完整性规则时触发的过程例:在例:在“学号不能为空学号不能为空”的约束中的约束中nD约束作用的对象为约束作用的对象为Sno属性属性nO插入或修改插入或修改Student元组时元组时nASno不能为空不能为空nC无(无(A可作用于所有记录的可作用于所有记录的Sno属性)属性)nP拒绝执行该操作拒绝执行该操作例:在例:在“教授工资不得低于教授工资不得低于1
15、000元元”的约束中的约束中nD约束作用的对象为工资约束作用的对象为工资Sal属性属性nO插入或修改职工元组时插入或修改职工元组时nASal不能小于不能小于1000nC职称职称=教授教授,(A仅作用于职称仅作用于职称=教授教授的记录的记录)nP拒绝执行该操作拒绝执行该操作二、关系系统三类完整性的实现二、关系系统三类完整性的实现n关系数据库系统都提供了定义和检查实体完整性、关系数据库系统都提供了定义和检查实体完整性、参照完整性和用户定义的完整性的功能参照完整性和用户定义的完整性的功能n违反实体完整性、用户定义的完整性规则的操作违反实体完整性、用户定义的完整性规则的操作n拒绝执行拒绝执行n违反参照
16、完整性的操作违反参照完整性的操作n拒绝执行拒绝执行n接受这个操作,同时执行一些附加的操作,以接受这个操作,同时执行一些附加的操作,以保证数据库的状态正确保证数据库的状态正确三、参照完整性的实现三、参照完整性的实现例:职工部门数据库包含职工表例:职工部门数据库包含职工表EMP和部门表和部门表DEPTnDEPT关系的主码为部门号关系的主码为部门号DeptnonEMP关系的主码为职工号关系的主码为职工号Empno,外码为部门外码为部门号号DeptnonDEPT:被参照关系或目标关系被参照关系或目标关系nEMP:参照关系参照关系nRDBMS实现参照完整性时需要考虑以下实现参照完整性时需要考虑以下4方面
17、:方面:1.外码是否可以接受空值的问题外码是否可以接受空值的问题n外码是否能够取空值外码是否能够取空值n依赖于应用环境的语义依赖于应用环境的语义n实现参照完整性实现参照完整性n系统提供定义外码的机制系统提供定义外码的机制n定义外码列是否允许空值的机制定义外码列是否允许空值的机制例:在职工部门数据库中例:在职工部门数据库中nEMP关系包含有外码关系包含有外码Deptnon某元组的这一列若为空值,表示这个职工尚未某元组的这一列若为空值,表示这个职工尚未分配到任何具体的部门工作和应用环境的语义分配到任何具体的部门工作和应用环境的语义是相符是相符例:学生选课数据库例:学生选课数据库nStudent关系
18、为被参照关系,其主码为关系为被参照关系,其主码为Sno。nSC为参照关系,外码为为参照关系,外码为Sno。n若若SC的的Sno为空值:表明尚不存在的某个学生,为空值:表明尚不存在的某个学生,或者某个不知学号的学生,选修了某门课程,或者某个不知学号的学生,选修了某门课程,其成绩记录在其成绩记录在Grade中。中。n与学校的应用环境是不相符的,因此与学校的应用环境是不相符的,因此SC的的Sno列不能取空值。列不能取空值。2.在被参照关系中在被参照关系中删除元组删除元组时出现违约操作的情形时出现违约操作的情形n删除被参照关系的某个元组(删除被参照关系的某个元组(student)而参而参照关系有若干元
19、组照关系有若干元组(SC)的外码值与被删除的被的外码值与被删除的被参照关系的主码值相同参照关系的主码值相同n违约反应的策略违约反应的策略n级联删除(级联删除(CASCADES)n受限删除(受限删除(RESTRICTED)n置空值删除(置空值删除(NULLIFIES)n这三种处理方法,哪一种是正确的,要依应用这三种处理方法,哪一种是正确的,要依应用环境的语义来定环境的语义来定n级联删除级联删除n将参照关系中外码值与被参照关系中要删除元将参照关系中外码值与被参照关系中要删除元组主码值相对应的元组一起删除组主码值相对应的元组一起删除n受限删除受限删除n当参照关系中没有任何元组的外码值与要删除当参照关
20、系中没有任何元组的外码值与要删除的被参照关系的元组的主码值相对应时,系统的被参照关系的元组的主码值相对应时,系统才执行删除操作,否则拒绝此删除操作才执行删除操作,否则拒绝此删除操作n置空值删除置空值删除n删除被参照关系的元组,并将参照关系中与被删除被参照关系的元组,并将参照关系中与被参照关系中被删除元组主码值相等的外码值置参照关系中被删除元组主码值相等的外码值置为空值。为空值。例:要删除例:要删除Student关系中关系中Sno=950001的元组,的元组,而而SC关系中有关系中有4个元组的个元组的Sno都等于都等于950001。n级联删除:将级联删除:将SC关系中所有关系中所有4个个Sno=
21、950001的元组一起删除。如果参照关的元组一起删除。如果参照关系同时又是另一个关系的被参照关系,则这种系同时又是另一个关系的被参照关系,则这种删除操作会继续级联下去删除操作会继续级联下去n受限删除:系统将拒绝执行此删除操作。受限删除:系统将拒绝执行此删除操作。n置空值删除:将置空值删除:将SC关系中所有关系中所有Sno=950001的元组的的元组的Sno值置为空值。值置为空值。n在学生选课数据库中,显然第一种方法和第二在学生选课数据库中,显然第一种方法和第二种方法都是对的。第三种方法不符合应用环境种方法都是对的。第三种方法不符合应用环境语义。语义。3.在参照关系中在参照关系中插入元组插入元组
22、时出现违约操作的情形时出现违约操作的情形n需要在参照关系中插入元组,而被参照关系不需要在参照关系中插入元组,而被参照关系不存在相应的元组存在相应的元组n违约反应违约反应n受限插入受限插入n递归插入递归插入n受限插入受限插入n仅当被参照关系中存在相应的元组,其主码值仅当被参照关系中存在相应的元组,其主码值与参照关系插入元组的外码值相同时,系统才与参照关系插入元组的外码值相同时,系统才执行插入操作,否则拒绝此操作。执行插入操作,否则拒绝此操作。n递归插入递归插入n首先向被参照关系中插入相应的元组,其主码首先向被参照关系中插入相应的元组,其主码值等于参照关系插入元组的外码值,然后向参值等于参照关系插
23、入元组的外码值,然后向参照关系插入元组。照关系插入元组。例:向例:向SC关系插入(关系插入(99001,1,90)元组,而)元组,而Student关系中尚没有关系中尚没有Sno=99001的学生的学生n受限插入:系统将拒绝向受限插入:系统将拒绝向SC关系插入关系插入(99001,1,90)元组)元组n递归插入:系统将首先向递归插入:系统将首先向Student关系插入关系插入Sno=99001的元组,然后向的元组,然后向SC关系插入关系插入(99001,1,90)元组。)元组。4.修改修改被参照关系中主码的问题被参照关系中主码的问题n两种策略两种策略n不允许修改主码不允许修改主码n允许修改主码允
24、许修改主码n允许修改主码策略允许修改主码策略n违约操作违约操作n要修改被参照关系中某些元组的主码值,而要修改被参照关系中某些元组的主码值,而参照关系中有些元组的外码值正好等于被参参照关系中有些元组的外码值正好等于被参照关系要修改的主码值照关系要修改的主码值n要修改参照关系中某些元组的主码值,而被要修改参照关系中某些元组的主码值,而被参照关系中没有任何元组的主码值等于参照参照关系中没有任何元组的主码值等于参照关系修改后的外码值关系修改后的外码值n违约反应违约反应(1)n修改的关系是被参照关系:与删除类似修改的关系是被参照关系:与删除类似n级联修改级联修改n受限修改受限修改n置空值修改置空值修改n
25、级联修改级联修改n修改被参照关系中主码值同时,用相同的方修改被参照关系中主码值同时,用相同的方法修改参照关系中相应的外码值。法修改参照关系中相应的外码值。n受限修改受限修改n拒绝此修改操作。拒绝此修改操作。n只当参照关系中没有任何元组的外码值等于只当参照关系中没有任何元组的外码值等于被参照关系中某个元组的主码值时,这个元被参照关系中某个元组的主码值时,这个元组的主码值才能被修改。组的主码值才能被修改。n置空值修改置空值修改n修改被参照关系中主码值,同时将参照关系修改被参照关系中主码值,同时将参照关系中相应的外码值置为空值。中相应的外码值置为空值。例:将例:将Student关系中关系中Sno=9
26、50001的元组中的元组中Sno值改为值改为960123。而。而SC关系中有关系中有4个元组的个元组的Sno=950001n级联修改级联修改n将将SC关系中关系中4个个Sno=950001元组中的元组中的Sno值也改为值也改为960123。如果参照关系同时。如果参照关系同时又是另一个关系的被参照关系,则这种修改又是另一个关系的被参照关系,则这种修改操作会继续级联下去。操作会继续级联下去。n受限修改受限修改n只有只有SC中没有任何元组的中没有任何元组的Sno=950001时,时,才能修改才能修改Student表中表中Sno=950001的元的元组的组的Sno值改为值改为960123。n置空值修改
27、置空值修改n将将Student表中表中Sno=950001的元组的的元组的Sno值改为值改为960123。而将。而将S表中所有表中所有Sno=950001的元组的的元组的Sno值置为空值。值置为空值。n在学生选课数据库中只有第一种方法是正确的。在学生选课数据库中只有第一种方法是正确的。n违约反应违约反应(2)n修改的关系是参照关系:与插入类似修改的关系是参照关系:与插入类似n受限插入受限插入n递归插入递归插入nRDBMS实现参照完整性实现参照完整性n需要向用户提供定义主码、外码的机制需要向用户提供定义主码、外码的机制n向用户提供按照自己的应用要求选择处理依赖向用户提供按照自己的应用要求选择处理
28、依赖关系中对应的元组的方法关系中对应的元组的方法四、断言与触发器机制四、断言与触发器机制1、断言(、断言(Assertion)n断言:一个谓词,它表达了我们希望数据库总能断言:一个谓词,它表达了我们希望数据库总能满足的一个条件。域约束和参照完整性约束是断满足的一个条件。域约束和参照完整性约束是断言的特殊形式。言的特殊形式。2、触发器(、触发器(Trigger)n触发器触发器:一类靠事件驱动的特殊过程,任何用户:一类靠事件驱动的特殊过程,任何用户对该数据的增加、删除、修改操作均服务器自动对该数据的增加、删除、修改操作均服务器自动激活相应的触发器,在核心层进行集中的完整性激活相应的触发器,在核心层
29、进行集中的完整性控制。控制。n一个触发器由事件、动作和条件一个触发器由事件、动作和条件3部分组成。部分组成。完整性小结完整性小结n数据库的完整性是为了保证数据库中存储的数据数据库的完整性是为了保证数据库中存储的数据是正确的、相容的、有效的。所谓正确的是指符是正确的、相容的、有效的。所谓正确的是指符合现实世界语义的。合现实世界语义的。nDBMS完整性实现的机制完整性实现的机制n完整性约束定义机制完整性约束定义机制n完整性检查机制完整性检查机制n违背完整性约束条件时违背完整性约束条件时DBMS应采取的动作应采取的动作n完整性机制的实施会极大地影响系统性能完整性机制的实施会极大地影响系统性能n不同的数据库产品对完整性的支持策略和支持程不同的数据库产品对完整性的支持策略和支持程度是不同的度是不同的n许多数据库管理系统对完整性机制的支持比对许多数据库管理系统对完整性机制的支持比对安全性的支持要晚得多也弱得多安全性的支持要晚得多也弱得多n数据库厂商对完整性的支持越来越好,不仅在数据库厂商对完整性的支持越来越好,不仅在能保证实体完整性和参照完整性而且能在能保证实体完整性和参照完整性而且能在DBMS核心定义、检查和保证用户定义的完整核心定义、检查和保证用户定义的完整性约束条件性约束条件
限制150内