您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 市场营销 > 数据库系统原理---5.
1/43数据库系统原理第五章数据库完整性黄穗副教授主讲暨南大学信息学院计算机系2/43【教学目标】认识数据库完整的任务与作用。了解完整性控制机制。掌握完整性约束的定义方法和步骤。【教学重点】并完整性约束的定义与控制方法,实体、参照、自定义完整性的功能。【教学难点】完整性约束的形式化表述,自定义约束的实现方法。3/43第一节、实体完整性【教学目标】了解完整性的基本概念与机制了解实体完整性约束的内容教学进度4/43什么是数据库的完整性数据的正确性和相容性防止不合语义的数据进入数据库。例:学生的年龄必须是整数,取值范围为14--29;学生的性别只能是男或女;学生的学号一定是唯一的;学生所在的系必须是学校开设的系;完整性:否真实地反映现实世界5/43完整性控制机制1.完整性约束条件定义机制2.完整性检查机制3.违约反应完整性约束条件定义完整性约束条件:数据模型的组成部分约束数据库中数据的语义DBMS应提供定义数据库完整性约束条件,并把它们作为模式的一部分存入数据库中6/43完整性控制机制检查用户发出的操作请求是否违背了完整性约束条件违约反应如果发现用户的操作请求使数据违背了完整性约束条件,则采取一定的动作来保证数据的完整性。7/43完整性约束条件作用的对象列:对属性的取值类型、范围、精度等的约束条件元组:对元组中各个属性列间的联系的约束关系:对若干元组间、关系集合上以及关系之间的联系的约束静态对静态对象的约束是反映数据库状态合理性的约束动态对动态对象的约束是反映数据库状态变迁的约束8/431.静态列级约束静态列级约束:对的取值域的说明最常见、最简单、最容易实现的一类完整性约束五类静态列级约束1)数据类型约束:数据的类型、长度、单位、精度等例:学生姓名的数据类型为字符型,长度为82)对数据格式的约束例:学号:前两位表示入学年份,后四位为顺序编号日期:YY.MM.DD。9/433)取值范围或取值集合的约束例:规定成绩的取值范围为0-100年龄的取值范围为14-29性别的取值集合为[男,女]4)对空值的约束空值:未定义或未知的值空值:与零值和空格不同有的列允许空值,有的则不允许,如成绩可为空值5)其他约束例:关于列的排序说明,组合列等10/432.静态元组约束规定元组的各个列之间的约束关系例:订货关系中发货量=订货量教师关系中教授的工资=700元静态元组约束只局限在元组上3.静态关系约束关系的各个元组之间或若干关系之间存在的各种联系或约束.常见静态关系约束:1)实体完整性约束2)参照完整性约束3)函数依赖约束4)统计约束11/43函数依赖约束关系字段间存在的函数依赖例:在学生-课程-教师关系SJT(S,J,T)的函数依赖:((S,J)→T,T→J)主码:(S,J)统计约束定义某个字段值一个关系多个元组的统计值之间的约束关系例:职工平均工资的2倍=部门经理的工资=职工平均工资的5倍职工平均工资值:统计值12/434.动态列级约束动态列级约束是修改列定义或列值时应满足的约束条件1)修改列定义时的约束例:将原来允许空值的列改为不允许空值时:该列目前已存在空值,则拒绝这种修改2)修改列值时的约束修改列值时新旧值之间要满足的约束条件例:职工工资调整=原来工资年龄只能增长13/435.动态元组约束修改元组值:各个字段之间要满足的约束条件例:职工工资调整不得低于其原来工资+工龄*1.56.动态关系约束关系变化前后状态:限制条件例:事务一致性、原子性等约束条件14/43实体完整性约束条件小结粒度状态列级元组级关系级静态列定义·类型·格式·值域·空值元组值应满足的条件实体完整性约束参照完整性约束函数依赖约束统计约束动态改变列定义或列值元组新旧值之间应满足的约束条件关系新旧状态间应满足的约束条件15/43DBMS的完整性控制机制1.定义功能一个完善的完整性控制机制应该允许用户定义各类完整性约束条件。2.检查功能立即执行的约束(Immediateconstraints)语句执行完后立即检查是否违背完整性约束延迟执行的约束(Deferredconstrainsts)完整性检查延迟到整个事务执行结束后进行16/43例:银行数据库中“借贷总金额应平衡”的约束就应该是延迟执行的约束从账号A转一笔钱到账号B为一个事务,从账号A转出去钱后账就不平了,必须等转入账号B后账才能重新平衡,这时才能进行完整性检查。3.违约反应拒绝该操作其他处理方法17/43第二节、参照完整性【教学目标】了解参照完整性的基本概念了解参照实体完整性约束的内容与机制18/43参照完整性的一个例子例:职工-部门数据库包含职工表EMP(含职工编号empno、姓名、专业、岗位等属性)和部门表DEPT(含部门编号deptno、部门名称、部门职责、部门负责人等属性)1DEPT关系的主码为部门号Deptno2EMP关系的主码为职工号Empno,外码为部门号Deptno称DEPT为被参照关系或目标关系,EMP为参照关系RDBMS实现参照完整性时需要考虑以下4方面:19/431.外码是否可以接受空值的问题外码是否能够取空值:依赖于应用环境的语义实现参照完整性:系统提供定义外码的机制定义外码列是否允许空值的机制20/43例1:在职工-部门数据库中,EMP关系包含有外码Deptno某元组的这一列若为空值,表示这个职工尚未分配到任何具体的部门工作和应用环境的语义是相符21/43例2:学生-选课数据库Student关系为被参照关系,其主码为Sno。SC为参照关系,外码为Sno。若SC的Sno为空值:表明尚不存在的某个学生,或者某个不知学号的学生,选修了某门课程,其成绩记录在Grade中与学校的应用环境是不相符的,因此SC的Sno列不能取空值。22/432.在被参照关系中删除元组时的问题出现违约操作的情形:删除被参照关系的某个元组(student)而参照关系有若干元组(SC)的外码值与被删除的被参照关系的主码值相同23/43违约反应:可有三种策略级联删除(CASCADES)受限删除(RESTRICTED)置空值删除(NULLIFIES)这三种处理方法,哪一种是正确的,要依应用环境的语义来定24/43级联删除将参照关系中外码值与被参照关系中要删除元组主码值相对应的元组一起删除受限删除当参照关系中没有任何元组的外码值与要删除的被参照关系的元组的主码值相对应时,系统才执行删除操作,否则拒绝此删除操作25/43置空值删除删除被参照关系的元组,并将参照关系中与被参照关系中被删除元组主码值相等的外码值置为空值。26/43例:要删除Student关系中Sno=950001的元组,而SC关系中有4个元组的Sno都等于950001。级联删除:将SC关系中所有4个Sno=950001的元组一起删除。如果参照关系同时又是另一个关系的被参照关系,则这种删除操作会继续级联下去受限删除:系统将拒绝执行此删除操作。27/43置空值删除:将SC关系中所有Sno=950001的元组的Sno值置为空值。在学生选课数据库中,显然第一种方法和第二种方法都是对的。第三种方法不符合应用环境语义。28/433.在参照关系中插入元组时的问题出现违约操作的情形需要在参照关系中插入元组,而被参照关系不存在相应的元组违约反应受限插入递归插入29/43受限插入仅当被参照关系中存在相应的元组,其主码值与参照关系插入元组的外码值相同时,系统才执行插入操作,否则拒绝此操作。递归插入首先向被参照关系中插入相应的元组,其主码值等于参照关系插入元组的外码值,然后向参照关系插入元组。30/43例:向SC关系插入(99001,1,90)元组,而Student关系中尚没有Sno=99001的学生受限插入:系统将拒绝向SC关系插入(99001,1,90)元组递归插入:系统将首先向Student关系插入Sno=99001的元组,然后向SC关系插入(99001,1,90)元组。31/434.修改被参照关系中主码的问题两种策略(1)不允许修改主码(2)允许修改主码32/43允许修改主码策略违约操作要修改被参照关系中某些元组的主码值,而参照关系中有些元组的外码值正好等于被参照关系要修改的主码值要修改参照关系中某些元组的主码值,而被参照关系中没有任何元组的外码值等于被参照关系修改后的主码值33/43违约反应(1)修改的关系是被参照关系:与删除类似级联修改受限修改置空值修改34/43级联修改修改被参照关系中主码值同时,用相同的方法修改参照关系中相应的外码值。受限修改拒绝此修改操作。只当参照关系中没有任何元组的外码值等于被参照关系中某个元组的主码值时,这个元组的主码值才能被修改。置空值修改修改被参照关系中主码值,同时将参照关系中相应的外码值置为空值。35/43例:将Student关系中Sno=950001的元组中Sno值改为960123。而SC关系中有4个元组的Sno=950001级联修改:将SC关系中4个Sno=950001元组中的Sno值也改为960123。如果参照关系同时又是另一个关系的被参照关系,则这种修改操作会继续级联下去。36/43受限修改:只有SC中没有任何元组的Sno=950001时,才能修改Student表中Sno=950001的元组的Sno值改为960123。置空值修改:将Student表中Sno=950001的元组的Sno值改为960123。而将S表中所有Sno=950001的元组的Sno值置为空值。在学生选课数据库中只有第一种方法正确。37/43违约反应(2)修改的关系是参照关系:与插入类似受限插入递归插入38/43参照完整性的实现RDBMS在实现参照完整性时:需要向用户提供定义主码、外码的机制向用户提供按照自己的应用要求选择处理依赖关系中对应的元组的方法39/43第三节、自定义的完整性【教学目标】了解自定义完整性的基本概念了解自定义实体完整性约束的实现机制40/43自定义属性约束空值、唯一、check短语,见教材P157。ssexchar(2)check(ssexin(‘男’,‘女’))gradesmallintcheck(grade=0ANDgrade=100)自定义元组约束check短语,见教材P158。自定义约束命名子句用constraint子句,见教材P159。constraintc1check(sal+deduct=3000)c1为约束名。41/43第四节、触发器【教学目标】了解触发器的基本概念了解触发器的设置与应用42/43触发器概念触发器是一种特殊的存储过程(storedprocedures),由用户设定在特定的关系表上,由三种条件之一或组合来触发:UPDATE语句、INSERT语句、DELETE语句。存储过程是专业数据库管理员应掌握的一项专门技术,它是潜在地包含着大量的SQL语句的函数。第一次执行时由数据库引擎进行编译,在数据库服务器上顺序执行其中的SQL语句,只有当所有语句都执行完成后才将一些信息返回到客户端,节省网络交互流量。定义触发器Createtrigger触发器名{before|after}触发事件on表名Foreach{row|statement}[when触发条件]触发体(存储过程)例子:教材P162例18-2043/43激活触发器触发器由数据库服务器自动维护和执行。可以在一个表上定义多个触发器,按before和after以及触发器定义顺序执行。删除触发器Droptrigger触发器名on表名使用触发器的限制1、触发器不能定义在临时表上;2、触发器必须在当前数据库的表上创建;3、触发器不能定义在视图上;4、当一个表被删除时,所有与这个表相关的触发器将自动被删除。5、触发器可以嵌套,但要注意循环。
本文标题:数据库系统原理---5.
链接地址:https://www.777doc.com/doc-2333120 .html