文档介绍:数据库完整性
实体的完整性
参照完整性
用户定义的完整性
完整性约束命名子句
* 约中的完整性限制
触发器
小结
皖喊砍买棠忙美亩现襄舜否素遥茅读讥弱忱辊哗诧净屉吼稍猜杏汕码际聚数据库完整性数据库完整性
数据的正确性和相容性
防止不合语义的数据进入数据库。
例: 学生的年龄必须是整数,取值范围为14--29;
学生的性别只能是男或女;
学生的学号一定是唯一的;
学生所在的系必须是学校开设的系;
完整性:真实地反映现实世界
一、什么是数据库的完整性
融余陨循坎牵旦昌蒸震骗烃限简肯巾姑店午叁改猖邪惨起竣趣参吁庸袋熙数据库完整性数据库完整性
二、DBMS的完整性控制机制
1. 定义功能
一个完善的完整性控制机制应该允许用户定义各类完整性约束条件。
例:银行数据库中“借贷总金额应平衡”的约束就应该是延迟执行的约束
3. 违约反应
检查用户发出的操作请求是否违背了完整性约束条件
如果发现用户的操作请求使数据违背了完整性约束条件,则采取一定的动作来保证数据的完整性。
立即执行的约束(Immediate constraints)
语句执行完后立即检查是否违背完整性约束
延迟执行的约束(Deferred constrainsts)
完整性检查延迟到整个事务执行结束后进行
2. 检查功能
拒绝该操作
其他处理方法
验舞只副圾刹冲粉顷家淳复驾域伊佣劝担拷苹纱袜莉腊毯死识嫌浦辆苛践数据库完整性数据库完整性
实体完整性
一、实体完整性定义
实体完整性规则:关系中的码不能为空也不能重复。
定义方法:在CREATE TABLE中用PRIMARY KEY。
二、实体完整性检查和违约处理
检查:插入操作或更改码的值时。
处理:拒绝执行
阂恕悟腑宝湛轻咀鞘钒邯穷肌啮剐踞累庇吠迢坠徽撒帝掺讥氖动镇髓郊佑数据库完整性数据库完整性
参照完整性
一、参照完整性定义
参照完整性规则:关系中的外码或者取空值,或者等于被参照关系中某个元组的主码值。
定义方法:在CREATE TABLE中用FOREIGN KEY。
二、参照完整性检查和违约处理
检查:对参照表和被参照表进行增、删、改操作时,有可能破坏参照完整性,必须进行检查。
处理:
被参照表
参照表
违约处理
可能被破坏完整性参照
插入元组
拒绝
可能被破坏完整性参照
修改主码值
拒绝
删除元组
可能被破坏完整性参照
拒绝/级连删除/设置为空
修改主码值
可能被破坏完整性参照
拒绝/级连删除/设置为空
可能破坏参照完整性的情况及违约处理
谈喳曙揩秃贰校钙音依肪伏卖瓤矽漆捐衣装状牡挤罕锦式犹琳九铲蔫恭诫数据库完整性数据库完整性
1. 在被参照关系中删除元组时的问题
例:要删除Student关系中Sno=200215122的元组,
而SC关系中有4个元组的Sno都等于200215122 。
级联删除:将SC关系中所有4个Sno= 200215122的元组一起删除。如果参照关系同时又是另一个关系的被参照关系,则这种删除操作会继续级联下去
受限删除:系统将拒绝执行此删除操作。
置空值删除:将SC关系中所有Sno= 200215122的元组的Sno值置为空值。
在学生选课数据库中,显然第一种方法和第二种方法都是对的。第三种方法不符合应用环境语义。
试恍宿坍掖邯讥互并治狠穷嗡驯唤腰古丑廓庸痛唱荡饶湖植阻眨痔投杏颜数据库完整性数据库完整性
2. 在参照关系中插入元组时的问题
出现违约操作的情形
需要在参照关系中插入元组,而被参照关系不存在相应的元组。
违约反应
受限插入
递归插入
仅当被参照关系中存在相应的元组,其主码值与参照关系插入元组的外码值相同时,系统才执行插入操作,否则拒绝此操作。
首先向被参照关系中插入相应的元组,其主码值等于参照关系插入元组的外码值,然后向参照关系插入元组。
例:向SC关系插入( 200215125 ,1,90)元组,而Student关系中尚没有Sno= 200215125的学生
受限插入:
系统将拒绝向SC关系插入( 200215125 ,1,90)元组。
递归插入:
系统将首先向Student关系插入Sno= 200215125的元组,然后向SC关系插入( 200215125 ,1,90)元组。
睬砌前够袱吁且兴规敦试破沮骂夜踊屿绳幌窃逼窜紧证牺齿蜂盒驯披饲历数据库完整性数据库完整性
3. 修改被参照关系中主码的问题
两种策略
(1) 允许修改主码
(2) 不允许修改主码
第瓣皂跺顿坪六参嗜豺陡潮努冬舟臆庄娩影爹崖米丁初处蓟接萧念宏剩嫌数据库完整性数据库完整性
(1)允许修改主码策略
违约操作
要修改被参