资源描述:
《数据库系统概论第5章数据库完整性》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第5章数据库完整性5.1完整性约束条件5.2完整性控制1数据库的完整性正确性相容性数据库完整性的实现:(1)定义完整性约束条件(2)完整性检查(3)违约反应10.1完整性约束条件完整性约束条件作用的对象:关系元组列列约束:是指列的类型、取值范围、精度、排序等约束.元组约束:是指元组中各个字段间的联系约束.关系约束:是指若干元组间、关系集合上以及关系之间的联系约束.2完整性约束条件作用对象的状态:静态动态静态约束:是指数据库每一确定状态时的数据对象所应满足的约束条件,它是反映数据库状态合理性的约束.动态约束:是指数据库从一种状态转变为另一种状
2、态时,新、旧值之间所满足的约束条件,它是反映数据库状态变迁的约束.完整性约束条件分类:列元组关系动态静态1234561:静态列级约束2:静态元组约束3:静态关系约束4:动态列级约束5:动态元组约束6:动态关系约束3一、静态列级约束静态列级约束:是指对一个列的取值域的说明。包括以下几个方面:(1)对数据类型的约束(数据的类型、长度、单位、精度等)(2)对数据格式的约束(3)对取值范围或取值集合的约束(4)对空值的约束(5)其他约束二、动态列级约束动态列级约束:是指修改列定义或列值时应满足的约束条件.包括以下几个方面:(1)修改列定义时的约束(
3、2)修改列值时的约束4三、静态元组约束静态元组约束:是指元组的各个列之间的约束关系.四、动态元组级约束动态元组级约束:是指修改元组的值时元组中各个列之间的约束条件.五、静态关系约束静态关系约束:是指一个关系的各个元组之间或者若干关系之间存在的约束条件.包括以下几个方面:(1)实体完整性约束(2)参照完整性约束(3)函数依赖约束(4)统计约束5六、动态关系约束动态关系约束:是指加在关系变化前后状态上的约束条件.总结:粒度状态列级元组级关系级静态动态列定义·类型·格式·值域·空值元组值应满足的条件实体完整性约束参照完整性约束函数依赖约束统计约束
4、改变列定义或列值元组新旧值之间应满足的约束条件关系新旧状态间应满足的约束条件610.2完整性控制完整性控制机制的功能:(1)定义功能(2)检查功能(3)如果发现用户的操作请求使数据违背了完整性约束条件,则采取一定的动作来保证数据的完整性.完整性规则的表示:五元组(D,O,A,C,P)D(Data):指约束作用的数据对象O(Operation):触发完整性检查的数据库操作A(Assertion):数据对象必须满足的断言或语义约束C(Condition):选择A作用的数据对象值的谓词P(Procedure):违反完整性规则时触发的过程立即执行检
5、查延迟执行检查7例子1:对表Student的“学号不能为空”的约束规定.五元组(D,O,A,C,P)D:约束作用的对象为Sno属性O:插入或修改Student元组时A:Sno不能为空C:无(A作用于所有记录的Sno属性)P:拒绝执行该操作例子2:对教师基本情况表的“教授工资不得低于1000元”的约束规定.五元组(D,O,A,C,P)D:约束作用的对象为工资Sal属性O:插入或修改职工元组时A:Sal不能小于1000C:职称=‘教授’P:拒绝执行该操作8实现参照完整性要考虑的几个问题:1.外码能否接受空值的问题学生(学号,姓名,性别,专业号,
6、年龄)专业(专业号,专业名)外码例子1:外码取空值表示该学生尚未分配到任何具体的专业学习.与应用环境的语义相符,因此外码可取空值.例子2:学生(学号,姓名,性别,专业号,年龄)课程(课程号,课程名,学分)选修(学号,课程号,成绩)外码(学号)取空值表示一个不存在的学生选了某门课程,成绩记录在成绩列中.与应用环境的语义不相符,因此外码不能取空值.92.在被参照关系中删除元组的问题例子:学生(学号,姓名,性别,专业号,年龄)选修(学号,课程号,成绩)学号姓名性别专业号年龄95001李勇男CS20…………….被参照关系学号课程号成绩9500117
7、89500138095001489………三种策略:(1)级联删除(2)受限删除(3)置空值删除在学生关系中删除元组(95001,李勇,男,CS,20)10例子:A(A#,AN)S(S#,SN,A#,SA)在A关系中删除元组(001,物理)?三种策略:(1)级联删除(2)受限删除(3)置空值删除113.在参照关系中插入元组时的问题例子:学生(学号,姓名,性别,专业号,年龄)选修(学号,课程号,成绩)参照关系学号姓名性别专业号年龄95001李勇男CS20…………….学号课程号成绩950011789500138095001489………两种策略:(
8、1)受限插入(2)递归插入在选修关系中插入元组(99001,1,90)12例子:S(S#,SN,A#,SA)A(A#,AN)在S关系中插入元组(95001,李勇,031,20)?