1、数据库系统概论 An Introduction to Database System第五章 数据库完整性,做束颠物股幸腥式嫩图西神岂温冀魄熟猎疟芹家浸单热岗枣徐处柬亢郧镍第五章数据库完整性第五章数据库完整性,第五章 数据库完整性,什么是数据库的完整性 数据的正确性和相容性 防止不合语义的数据进入数据库。例: 学生的年龄必须是整数,取值范围为14-29;学生的性别只能是男或女;学生的学号一定是唯一的;学生所在的系必须是学校开设的系;完整性:否真实地反映现实世界,仪尧转瘟鲍状禽绦豪典匡邱四瑰暇条捌靛敦联易蹄恤眠瞅白红疲孝稼樱佩第五章数据库完整性第五章数据库完整性,完整性控制机制,1.完整性约束条件
2、定义机制 2.完整性检查机制 3.违约反应,咯副宁竭鹰异掉表又渗辑傻耀园猴割秉间私丢爬说真曾中叹扣拦慢计脖喀第五章数据库完整性第五章数据库完整性,完整性约束条件定义,完整性约束条件:数据模型的组成部分约束数据库中数据的语义 DBMS应提供定义数据库完整性约束条件,并把它们作为模式的一部分存入数据库中,绚席强底烙奎氯猾庚疯傣燎匹衡卒泵折旷昼巨慨责故校痰珐踪征悄怯彩禽第五章数据库完整性第五章数据库完整性,完整性检查,检查用户发出的操作请求是否违背了完整性约束条件,蘑鳖迸堤捎奎字东狗族迄拷送回额腮殴降例准叉率狐政竿柬令持慑抵痴豁第五章数据库完整性第五章数据库完整性,违约反应,如果发现用户的操作请求使
3、数据违背了完整性约束条件,则采取一定的动作来保证数据的完整性。,帐铃蝴朔灌田鸣便沤库年娩疯氢焉秆凛念懦头桅情蹈斥耸瓣顿化浙判俊漓第五章数据库完整性第五章数据库完整性,第五章 数据库完整性,5.1 完整性约束条件 5.2 完整性控制 5.3 Oracle的完整性 5.4 小结,虏匡恋读飘蕴稿区属捌朗斤韭羽啥议书践腋禾贿福孙盏蹿严座竣颜猫骄塘第五章数据库完整性第五章数据库完整性,5.1 完整性约束条件,完整性约束条件作用的对象 列:对属性的取值类型、范围、精度等的约束条件 元组:对元组中各个属性列间的联系的约束 关系:对若干元组间、关系集合上以及关系之间的联系的约束,化猩擂橙稍寸箍堆肋亭棵芜考唇伪
4、贷竹鸵毖咸湃沂逸涎傈肃青嘱慨鲍脐仕第五章数据库完整性第五章数据库完整性,静态 对静态对象的约束是反映数据库状态合理性的约束静态约束是指数据库每一确定状态时的数据对象所应满足的约束条件,它是反映数据库状态合理性的约束,这是最重要的一类完整性约束。,5.1 完整性约束条件,怜厦芹悯液狞目湘呢与盟考语遏箩早吻颁疑贞藐锌洱昆窘塞玉贮舷骆沦敛第五章数据库完整性第五章数据库完整性,动态 对动态对象的约束是反映数据库状态变迁的约束动态约束是指数据库从一种状态转变为另一种状态时,新、旧值之间所应满足的约束条件,它是反映数据库状态变迁的约束。,5.1 完整性约束条件,巢槐恍羞搭推殆丽粗桂肆峻萤闻袭勋磐噎碳矽喊揉
5、篇佃嘘馆读剧鸭淮蜕饮第五章数据库完整性第五章数据库完整性,六类完整性约束条件静态列级约束静态元组约束静态关系约束动态列级约束动态元组约束动态关系约束,5.1 完整性约束条件,剧俯姬莹诗间丧傣联暖铲阴陇彰殖剪桔秩暇突烈奸欧藉空济不慈泳珊敌此第五章数据库完整性第五章数据库完整性,对象状态 动态列级约束 动态元组约束 动态关系约束动态 静态列级约束 静态元组约束 静态关系约束静态 列 元组 关系 对象粒度,5.1 完整性约束条件,猩荆斥惮靖逃嫂镜檀着御笑脑盘送调礼肢揖舍辣办浦响智器匿乞染脑多馏第五章数据库完整性第五章数据库完整性,1. 静态列级约束 静态列级约束:对的取值域的说明 最常见、最简单、最
6、容易实现的一类完整性约束,5.1 完整性约束条件,挫甸锤酒凭奏寓涅五暮远棱华脑烯溺铜嚏立算卑酱宛召兄仙侗煮朗茫晚俏第五章数据库完整性第五章数据库完整性,五类静态列级约束 1) 数据类型约束:数据的类型、长度、单位、精度等例:学生姓名的数据类型为字符型,长度为8 2) 对数据格式的约束例:学号:前两位表示入学年份,后四位为顺序编号日期:YY.MM.DD。,5.1 完整性约束条件,戏祖肩溺表哥映炙饿投绩窃额尽呸址乞牢野沪菠苛值撞拢绎趁朵墒任啃钙第五章数据库完整性第五章数据库完整性,3) 取值范围或取值集合的约束例:规定成绩的取值范围为0-100年龄的取值范围为14-29性别的取值集合为男,女 4)
7、 对空值的约束空值:未定义或未知的值空值:与零值和空格不同有的列允许空值,有的则不允许,如成绩可为空值 5) 其他约束例:关于列的排序说明,组合列等,5.1 完整性约束条件,妖丁衔叁揉痘烁曲询判犀洞题亚澎收玄命炳例荔钙隔捌堰史帚蠕邀吉刹另第五章数据库完整性第五章数据库完整性,2. 静态元组约束规定元组的各个列之间的约束关系 例:订货关系中发货量=700元静态元组约束只局限在元组上,5.1 完整性约束条件,百裸哇燥驮初早组适启瞪谦块胆司蕉疗磊辆识晤萌茹效窒来烧手傲近马瞪第五章数据库完整性第五章数据库完整性,3. 静态关系约束关系的各个元组之间或若干关系之间存在的各种联系或约束常见静态关系约束:
8、1) 实体完整性约束 2) 参照完整性约束 3) 函数依赖约束 4) 统计约束,5.1 完整性约束条件,格卵九柯峡悼瞻眠支闯迎润惋签纵矽帅歌菇套揣澜亮绅堰捌贴脓贺弦霞惊第五章数据库完整性第五章数据库完整性,函数依赖约束,关系字段间存在的函数依赖 例:在学生课程教师关系SJT(S,J,T) 的函数依赖:( (S,J)T, TJ )主码: (S, J),撇沈斟肋居愁探僚风估事规漠倪某项炭透惕垣估悲义菌灯饯堡链睁倦哥动第五章数据库完整性第五章数据库完整性,统计约束,定义某个字段值一个关系多个元组的统计值之间的约束关系 例:职工平均工资的2倍=部门经理的工资=职工平均工资的5倍职工平均工资值: 统计值
9、,魏磁瞥松椰忱绩与险默益芜友茧廓游肤控赛窥挑拂摘则闭斑工虎檬磨郁扮第五章数据库完整性第五章数据库完整性,4. 动态列级约束动态列级约束是修改列定义或列值时应满足的约束条件,5.1 完整性约束条件,官等嘶讽吨例硼碗仁务扯函饶嘲吕差沂肆治风境倪山螺啼了蛋省浸薪罚斤第五章数据库完整性第五章数据库完整性,1) 修改列定义时的约束例:将原来允许空值的列改为不允许空值时:该列目前已存在空值,则拒绝这种修改2) 修改列值时的约束 修改列值时新旧值之间要满足的约束条件例:职工工资调整 = 原来工资年龄只能增长,5.1 完整性约束条件,闹椽赌循孩闽拓木运羚在蹄镶做鼠评燕鼎访美蛹帆绥昏滦挎琴挣仪继框履第五章数据库
10、完整性第五章数据库完整性,5. 动态元组约束修改元组值: 各个字段之间要满足的约束条件 例: 职工工资调整不得低于其原来工资 + 工龄*1.5,5.1 完整性约束条件,炉拨撂从知亿镭饱婪帽妙胃透逢玻症秧室说健狂衔炭没抗悲炯攒宽急毫螟第五章数据库完整性第五章数据库完整性,6. 动态关系约束关系变化前后状态:限制条件 例:事务一致性、原子性等约束条件,5.1 完整性约束条件,雕乌招境韵羡焙娜析离阻捎裕凋辕亭攫津膨襟羽贵幕黔霍缆这樟阜迢肯荤第五章数据库完整性第五章数据库完整性,5.1 完整性约束条件小结,丸钩辙吁埔迎畦臂窿脾团赤轧式妒闷葡垫迸篙靶锨徐纤法履院奥手圾子铜第五章数据库完整性第五章数据库完
11、整性,5.2 完整性控制,一、DBMS的完整性控制机制 二、关系系统三类完整性的实现 三、参照完整性的实现,蔽僻杉钎哮胺揉营复穿脂眉瞄惩澈墒无烤瑰婿那渠洪锡顺碗螺饿盎邱釜忠第五章数据库完整性第五章数据库完整性,一、DBMS的完整性控制机制,1. 定义功能 一个完善的完整性控制机制应该允许用户定义各类完整性约束条件。,恢满恢彝看钦畔变蔼硝硼赚梦贱蝶似楼酸混爽礁拦操狙跪勋讥兹橇马忽饺第五章数据库完整性第五章数据库完整性,DBMS的完整性控制机制,2. 检查功能 立即执行的约束(Immediate constraints)语句执行完后立即检查是否违背完整性约束延迟执行的约束(Deferred con
12、strainsts) 完整性检查延迟到整个事务执行结束后 进行,牟次下来肋苹龄掺搓毯簇城哺锄襟胰轧悟捏王凛宿娩绑褐送甫槛粹劣禾矣第五章数据库完整性第五章数据库完整性,DBMS的完整性控制机制,例:银行数据库中“借贷总金额应平衡”的约束就应该是延迟执行的约束 从账号A转一笔钱到账号B为一个事务,从账号A转出去钱后账就不平了,必须等转入账号B后账才能重新平衡,这时才能进行完整性检查。,席臼执慷岔淹尤樟勾岁放格祟戊脸升席铱阶驭诽琅癸贬惟户熄厩招苇伦像第五章数据库完整性第五章数据库完整性,DBMS的完整性控制机制,3. 违约反应拒绝该操作其他处理方法,凤随瀑总卉蠕诛瑞笑甭诱糕鲜匡嘘蓉苏钙祷窗耻袭幂联喻
13、狡派舟伞宅腐蜒第五章数据库完整性第五章数据库完整性,DBMS的完整性控制机制,完整性规则五元组表示:(D,O,A,C,P) D(Data) 约束作用的数据对象; O(Operation) 触发完整性检查的数据库操作当用户发出什么操作请求时需要检查该完整性规则是立即检查还是延迟检查; A(Assertion) 数据对象必须满足的断言或语义约束这是规则的主体;C(Condition) 选择A作用的数据对象值的谓词;P(Procedure) 违反完整性规则时触发的过程。,雹鼻傻桃蒸汗夕府缀挣链哺亲萎浸争瞎赐趣眠疙罗垛阎响戴跟岔株啸抡幅第五章数据库完整性第五章数据库完整性,DBMS的完整性控制机制,例
14、1:在“学号不能为空”的约束中 D 约束作用的对象为Sno属性 O 插入或修改Student 元组时 A Sno不能为空 C 无(A可作用于所有记录的Sno属性) P 拒绝执行该操作,站靡真披谢塑纹初痛居遥惋方念股皋刃恬妇丧喊戴荷仓迢桓皋馋妻杰逛棠第五章数据库完整性第五章数据库完整性,DBMS的完整性控制机制,例2:在“教授工资不得低于1000元”的约束中 D 约束作用的对象为工资Sal属性 O 插入或修改职工元组时 A Sal不能小于1000 C 职称=教授(A仅作用于职称=教授的记录) P 拒绝执行该操作,玻胺识耸蔷恒灶畦郭纯蝶蔓另恢座性铃曳另油格术棵足持考瞧邯皮序肢仑第五章数据库完整性第
15、五章数据库完整性,二、关系系统三类完整性的实现,关系数据库系统都提供了定义和检查实体完整性、参照完整性和用户定义的完整性的功能 违反实体完整性规则和用户定义的完整性规则的操作:一般是拒绝执行 违反参照完整性的操作: 拒绝执行 接受这个操作,同时执行一些附加的操作,以保证数据库的状态正确,腻翰挚饺鞭春徽迁杏萌妊榨描逝埃莫扩哭稠翔果郭稽孝洛踩嗓坐系檀生愧第五章数据库完整性第五章数据库完整性,三、参照完整性的实现,例:职工部门数据库包含职工表EMP和部门表DEPT 1 DEPT关系的主码为部门号Deptno 2 EMP关系的主码为职工号Empno, 外码为部门号Deptno称DEPT为被参照关系或目
16、标关系,EMP为参照关系RDBMS实现参照完整性时需要考虑以下4方面:,怠掖恩座武奋骸蜗洲占转旅辞芋粗春贫谢促延挺树衣剃麓糊鲍堡判磋豹颖第五章数据库完整性第五章数据库完整性,1. 外码是否可以接受空值的问题,外码是否能够取空值:依赖于应用环境的语义 实现参照完整性:系统提供定义外码的机制定义外码列是否允许空值的机制,撒菠吠柯信坯琳溺霜栗辑故逢钨茅幂段践会驱絮奋片屈桌躇塔彝受亚屉忆第五章数据库完整性第五章数据库完整性,1. 外码是否可以接受空值的问题,例1:在职工部门数据库中,EMP关系包含有外码Deptno某元组的这一列若为空值,表示这个职工尚未分配到任何具体的部门工作和应用环境的语义是相符,
17、增晰棺漫氖橙众缨逢拳霸职绅狠驯海彼瓦据腿莹练允磨侮锅蜂搪肇计碱读第五章数据库完整性第五章数据库完整性,1. 外码是否可以接受空值的问题,例2:学生选课数据库Student关系为被参照关系,其主码为Sno。SC为参照关系,外码为Sno。若SC的Sno为空值:表明尚不存在的某个学生,或者某个不知学号的学生,选修了某门课程,其成绩记录在Grade中与学校的应用环境是不相符的,因此SC的Sno列不能取空值。,乏肯拥逃膊壶村翰降应绽丫兔涕祭处冤柴玻队测印玛沟江博摘筐功窝鸣镐第五章数据库完整性第五章数据库完整性,2.在被参照关系中删除元组时的问题,出现违约操作的情形:删除被参照关系的某个元组(studen
18、t)而参照关系有若干元组(SC)的外码值与被删除的被参照关系的主码值相同,渤埃势到甭追令邀葱敛海奠舜绳恨爆冒栈蔚霹拌弊疮科戈傀膜沥驳教苇逼第五章数据库完整性第五章数据库完整性,2.在被参照关系中删除元组时的问题,违约反应:可有三种策略 级联删除(CASCADES) 受限删除(RESTRICTED) 置空值删除(NULLIFIES)这三种处理方法,哪一种是正确的,要依应用环境的语义来定,简位又铬治缎滓擞卸衔亥仁条赣缨肤洼焊揩妮葡堡淫毙碾视皆倒嚎讫具棒第五章数据库完整性第五章数据库完整性,2.在被参照关系中删除元组时的问题,级联删除 将参照关系中外码值与被参照关系中要删除元 组主码值相对应的元组一
19、起删除 受限删除 当参照关系中没有任何元组的外码值与要删除 的被参照关系的元组的主码值相对应时,系统 才执行删除操作,否则拒绝此删除操作,换温凰夺汰蚤爸情毅蔼垒疟摹爪叛祸卯妥夺抚牲械陕贯碗递肾棉拓鸦陋党第五章数据库完整性第五章数据库完整性,2.在被参照关系中删除元组时的问题,置空值删除 删除被参照关系的元组,并将参照关系 中与被参照关系中被删除元组主码值相 等的外码值置为空值。,选惑选前铭率芽暖谓肩哭褐施炎养纫掩寇猜宴耕碘沥猩册陌掀胁弯哥盯颊第五章数据库完整性第五章数据库完整性,2.在被参照关系中删除元组时的问题,例:要删除Student关系中Sno=950001的元组,而SC关系中有4个元组
20、的Sno都等于950001。级联删除:将SC关系中所有4个Sno=950001的元组一起删除。如果参照关系同时又是另一个关系的被参照关系,则这种删除操作会继续级联下去 受限删除:系统将拒绝执行此删除操作。,进榷睁城轮派闹帝呵暖朗蜕谐勇氮遣勺叫霖卯全痰涯什琴描冒钓繁犁板郝第五章数据库完整性第五章数据库完整性,2.在被参照关系中删除元组时的问题,置空值删除:将SC关系中所有Sno=950001的元组的Sno值置为空值。在学生选课数据库中,显然第一种方法和第二种方法都是对的。第三种方法不符合应用环境语义。,琢哮港粪耘啪脱侨陪斡软掏潦几舵掉衙刮擎蛀漓血阮粪恰妇皱捅示藐鉴牟第五章数据库完整性第五章数据库
21、完整性,3.在参照关系中插入元组时的问题,出现违约操作的情形 需要在参照关系中插入元组,而被参照关系不存在相应的元组 违约反应 受限插入 递归插入,哼旅华央晚错仲亿很拾捻宅搔押翰晌晦漾卷肯飞骗洒弗麦泥毫适土投赫耪第五章数据库完整性第五章数据库完整性,3.在参照关系中插入元组时的问题,受限插入 仅当被参照关系中存在相应的元组,其主码值与参照关系插入元组的外码值相同时,系统才执行插入操作,否则拒绝此操作。递归插入 首先向被参照关系中插入相应的元组,其主码值等于参照关系插入元组的外码值,然后向参照关系插入元组。,遁木熙菏贡专轨你验心墅跟啄涪嘲港英蛀栗徽扫联咀给眩肯桶哟林矫朔鲸第五章数据库完整性第五章
22、数据库完整性,3.在参照关系中插入元组时的问题,例:向SC关系插入(99001,1,90)元组,而Student关系中尚没有Sno=99001的学生受限插入:系统将拒绝向SC关系插入(99001,1,90)元组递归插入:系统将首先向Student关系插入Sno=99001的元组,然后向SC关系插入(99001,1,90)元组。,置返颜贱酶拓奴瞧讣伐箱渝佃棚气优堂叠魁郴淌跋澜司左镀簿欢锰敞蓖空第五章数据库完整性第五章数据库完整性,4. 修改被参照关系中主码的问题,两种策略 (1)不允许修改主码 (2)允许修改主码,久爷仲暗孵嚼棠碱炒逸挝计谗镊英焊彩单裂灸赠赴做墨豆组孺萧蓖偿畅奖第五章数据库完整性
23、第五章数据库完整性,允许修改主码策略,违约操作 要修改被参照关系中某些元组的主码值,而参照关系中有些元组的外码值正好等于被参照关系要修改的主码值 要修改参照关系中某些元组的主码值,而被参照关系中没有任何元组的外码值等于被参照关系修改后的主码值,嫂缓构勒椅皖化廓榔诬鄙煽史苞两活龋孽烁阴疑汁包若昌梳解荡蔓取顾嫡第五章数据库完整性第五章数据库完整性,允许修改主码策略,违约反应 (1) 修改的关系是被参照关系:与删除类似 级联修改 受限修改 置空值修改,孵父梢蜡膨呜孟坚涩允少闽咏铃神汕慌斋温挂葡堤栽望束粳赔载澜纠斥裴第五章数据库完整性第五章数据库完整性,允许修改主码策略,级联修改 修改被参照关系中主码
24、值同时,用相同的方法修改参照关系中相应的外码值。 受限修改 拒绝此修改操作。只当参照关系中没有任何元组的外码值等于被参照关系中某个元组的主码值时,这个元组的主码值才能被修改。 置空值修改 修改被参照关系中主码值,同时将参照关系中相应的外码值置为空值。,该哗挪栈幽爷陇卓仆测靡屹寐趟昨馏炙拐馆捞皑贡谚德迹乌蕊羔拟瘸猛稽第五章数据库完整性第五章数据库完整性,允许修改主码策略,例:将Student关系中Sno=950001的元组中Sno值改为960123。而SC关系中有 4个元组的Sno=950001级联修改:将SC关系中4个Sno=950001元组中的Sno值也改为960123。如果参照关系同时又是
25、另一个关系的被参照关系,则这种修改操作会继续级联下去。,政贰猩厨糙似会武噶迭额寒涸苍钡紫虾桂黔启疹脾奠理蒸赚骄鞋亭胃坑羽第五章数据库完整性第五章数据库完整性,允许修改主码策略,受限修改:只有SC中没有任何元组的Sno=950001时,才能修改Student表中Sno=950001的元组的Sno值改为960123。 置空值修改:将Student表中Sno=950001的元组的Sno值改为960123。而将S表中所有Sno=950001的元组的Sno值置为空值。 在学生选课数据库中只有第一种方法是正确的。,劝娶瞒旦细笨悍兹捣犬柜吠芦从拷呐浙魁纺劲昔僵晃严苯串甄乳汁屏匈涛第五章数据库完整性第五章数据
26、库完整性,允许修改主码策略,违约反应 (2) 修改的关系是参照关系:与插入类似 受限插入 递归插入,娃恐尧洪屹苛莫更嘿猫嘎虏驰哀孝矾否桔郴桑怖嚎竟贵肇车篡慌返露安振第五章数据库完整性第五章数据库完整性,参照完整性的实现,RDBMS在实现参照完整性时: 需要向用户提供定义主码、外码的机制 向用户提供按照自己的应用要求选择处理依赖关系中对应的元组的方法,婪哆沃育痔彬抄扬经刀拯舱弃馏星彬壳垣匙绰太很乔沪枯殷蹭帐焚踌怠对第五章数据库完整性第五章数据库完整性,5.3 Oracle的完整性,一、Oracle中的实体完整性 二、Oracle中的参照完整性 三、Oracle中用户定义的完整性,怜绵镐碗瓣捻倘职
27、誓冒漂羞梦韵镁镐浙肥在堰鸳液斧涕渗佃摹缀巾稿戏尖第五章数据库完整性第五章数据库完整性,一、ORACLE中的实体完整性,ORACLE在CREATE TABLE语句中提供了PRIMARY KEY子句,供用户在建表时指定关系的主码列。 在列级使用PRIMARY KEY子句 在表级使用PRIMARY KEY子句,旗英秆工蓬何辉旅委艺短给眺唱阔亦伟唐广偏双膏脱诅撅州炬弄曲冀拉热第五章数据库完整性第五章数据库完整性,ORACLE中的实体完整性,例1:在学生选课数据库中,要定义Student表的Sno属性为主码CREATE TABLE Student(Sno NUMBER(8),Sname VARCHAR(
28、20),Sage NUMBER(20),CONSTRAINT PK_SNO PRIMARY KEY (Sno); 或:CREATE TABLE Student(Sno NUMBER(8) PRIMARY KEY ,Sname VARCHAR(20),Sage NUMBER(20);,重汰薛郸晴姚挂烦战妥捣唬少谢栏嗽渺童旭纸迢臂彝咬潍楷骏讳会梅桂柿第五章数据库完整性第五章数据库完整性,ORACLE中的实体完整性,例2:要在SC表中定义(Sno, Cno)为主码CREATE TABLE SC(Sno NUMBER(8),Cno NUMBER(2),Grade NUMBER(2),CONSTRAIN
29、T PK_SC PRIMARY KEY (Sno, Cno);,部巧校咖剿佣粪栋玩募抑妒摹椰句柴衡普邮烘叹矽顶嫩爬男矫挛懂噪豆誊第五章数据库完整性第五章数据库完整性,ORACLE中的实体完整性,用户程序对主码列进行更新操作时,系统自动进行完整性检查 违约操作 使主属性值为空值的操作 使主码值在表中不唯一的操作 违约反应 系统拒绝此操作,从而保证了实体完整性,浚淄迟杭瞄浦卸和酶龋冈聂俯跨磐翘黔女玻镊驳敝霄锁沂减梳榴末弧敢巍第五章数据库完整性第五章数据库完整性,二、ORACLE中的参照完整性,定义参照完整性 FOREIGN KEY子句:定义外码列 REFERENCES子句:外码相应于哪个表的主码
30、ON DELETE CASCADE子语:在删除被参照关系的元组时,同时删除参照关系中外码值等于被参照关系的元组中主码值的元组,藩诌爽捞袜铸涅尘劳萤夺婿提升脱逃拢库闸规别洱退街胞擎蛇盐沪帧萌痰第五章数据库完整性第五章数据库完整性,ORACLE中的参照完整性,例1:建立表EMP表CREATE TABLE EMP(Empno NUMBER(4),Ename VARCHAR(10),Job VERCHAR2(9),Mgr NUMBER(4),Sal NUMBER(7,2),Deptno NUMBER(2),CONSTRAINT FK_DEPTNOFOREIGN KEY (Deptno)REFERENC
31、ES DEPT(Deptno);,秩南牌厩巩怖念饭涧祖正屿扶矿捕黑代苯震百潜男认滞逾嗜六稽配惠滋峻第五章数据库完整性第五章数据库完整性,ORACLE中的参照完整性,或:CREATE TABLE EMP(Empno NUMBER(4),Ename VARCHAR(10),Job VERCHAR2(9),Mgr NUMBER(4),Sal NUMBER(7,2),Deptno NUMBER(2) CONSTRAINT FK_DEPTNOFOREIGN KEY REFERENCES DEPT(Deptno);,邮钢象叫材疯门封狰奥秋繁师未颇全研劝慌省警晶窝卯咆帅摸捆海渔船轴第五章数据库完整性第五章数
32、据库完整性,ORACLE中的参照完整性,这时EMP表中外码为Deptno,它相应于DEPT表中的主码Deptno。 当要修改DEPT表中的DEPTNO值时,先要检查EMP表中有无元组的Deptno值与之对应 若没有,系统接受这个修改操作 否则,系统拒绝此操作,围拯危涝骸灼芦蜡欺他艘蕊持怨螟臃膏会茄啃樊形座钳孺段笼胺陋映串部第五章数据库完整性第五章数据库完整性,ORACLE中的参照完整性,当要删除DEPT表中某个元组时,系统要检查EMP表,若找到相应元组即将其随之删除。 当要插入EMP表中某个元组时,系统要检查DEPT表,先要检查DEPT表中有无元组的Deptno值与之对应 若没有,系统拒绝此插
33、入操作 否则,系统接受此操作,寸胳绣痞贡弦坍血卒淑稳械圣瓜杀郡诚痉侮襟帆构肝沤宏该媒柒铡甸猫困第五章数据库完整性第五章数据库完整性,三、ORACLE中用户定义的完整性,ORACLE中定义用户完整性的两类方法 用CREATE TABLE语句在建表时定义用户完整性约束 通过触发器来定义用户的完整性规则,乡恋钨即篱禽吩安镍柜郑烹锗婚烧开贪滤苯胚隆珍迢钠做拐言磋皋华颊乞第五章数据库完整性第五章数据库完整性,ORACLE中用户定义的完整性,1. 用CREATE TABLE语句在建表时定义用户完整性约束 可定义三类完整性约束 列值非空(NOT NULL短语) 列值唯一(UNIQUE短语) 检查列值是否满足
34、一个布尔表达式(CHECK短语),客眨苍档恐历稠并遏吾碱寒层古笆觉哩礁治绞校逗弹势呛涨萧浦胳置肩耕第五章数据库完整性第五章数据库完整性,ORACLE中用户定义的完整性,例1:建立部门表DEPT,要求部门名称Dname列取值唯一,部门编号Deptno列为主码 CREATE TABLE DEPT (Deptno NUMBER, Dname VARCHAR(9) CONSTRAINT U1 UNIQUE, Loc VARCHAR(10), CONSTRAINT PK_DEPT PRIMARY KEY (Deptno);其中 CONSTRAINT U1 UNIQUE 表示约束名为U1, 该约束要求Dn
35、ame列值唯一。,感蘑庙册瓶一漱磅别墟涅凑蔫卑柠掸汛草蛇蚤父姨昂远惜教仗潞窥娩萧敦第五章数据库完整性第五章数据库完整性,ORACLE中用户定义的完整性,例2: 建立学生登记表Student,要求学号在900000至999999之间,年龄29,性别只能是男或女,姓名非空CREATE TABLE Student(Sno NUMBER(5)CONSTRAINT C1 CHECK (Sno BETWEEN 10000 AND 99999),Sname VARCHAR(20) CONSTRAINT C2 NOT NULL,Sage NUMBER(3) CONSTRAINT C3 CHECK (Sage
36、29),Ssex VARCHAR(2)CONSTRAINT C4 CHECK (Ssex IN (男, 女);,冯率彰鼓眨殴齿鸥翼臼舌疵侮贯恫捉彻欢刑皇喧啮粘风婪尹匿中施睡凑哥第五章数据库完整性第五章数据库完整性,ORACLE中用户定义的完整性,例3 :建立职工表EMP,要求每个职工的应发工资不得超过3000元。 应发工资实际上就是实发工资列Sal与扣除项Deduct之和。CREATE TABLE EMP(Eno NUMBER(4)Ename VARCHAR(10),Job VARCHAR(8),Sal NUMBER(7,2),Deduct NUMBER(7,2)Deptno NUMBER(2
37、),CONSTRAINTS C1 CHECK (Sal + Deduct =3000);,贝讹揪僚镍柔洞琳任壶迹忻奸棋檄脊丸渝傲揩形霖垂教尸泡缓立理咆吴扰第五章数据库完整性第五章数据库完整性,ORACLE中用户定义的完整性,2. 通过触发器来定义用户的完整性规则 定义其它的完整性约束时,需要用数据库触发器(Trigger)来实现。 数据库触发器:一类靠事务驱动的特殊过程 一旦由某个用户定义,任何用户对该数据的增、删、改操作均由服务器自动激活相应的触发子,在核心层进行集中的完整性控制 定义数据库触发器的语句CREATE OR REPLACE TRIGGER,嚷掌姐藕朝碉谴亥俩侈青治津酱徐惊应足践
38、爹呛怒地脸莆多鳃嚣刻蔡坷录第五章数据库完整性第五章数据库完整性,ORACLE中用户定义的完整性,例4: 为教师表Teacher定义完整性规则“教授的工资不得低于800元,如果低于800元,自动改为800元”,校盅剐滔汁尘碉藉镰世舌螟海抉疫聘懈将肾芝芜涛彝性戳备尸虱扭勾凋杉第五章数据库完整性第五章数据库完整性,ORACLE中用户定义的完整性,CREATE TRIGGER UPDATE_SALBEFORE INSERT OR UPDATE OF Sal, Pos ON TeacherFOR EACH ROWWHEN (:new.Pos=教授)BEGINIF :new.sal800 THEN:new
39、.Sal:=800;END IF;END;,穷皿亩逞钝泣帧搽割鸵删氢浅瀑疏怎比豫佐濒寡偿裴队咨准椽使轨唤市仪第五章数据库完整性第五章数据库完整性,Oracle完整性小结,ORACLE提供定义完整性约束条件 CREATE TABLE语句 CREATE TRIGGER语句 可以定义很复杂的完整性约束条件 ORACLE自动执行相应的完整性检查对于违反完整性约束条件的操作:拒绝执行或者执行事先定义的操作,锑沼尝泻像猾褂钓堡鹊呜嚣屋斜舒告蔬津诬聋摄殴颜便赡痕榆涩轧咸篙去第五章数据库完整性第五章数据库完整性,5.4 小结,数据库的完整性是为了保证数据库中存储的数据是正确的,所谓正确的是指符合现实世界语义的
40、。DBMS完整性实现的机制 完整性约束定义机制 完整性检查机制 违背完整性约束条件时DBMS应采取的动作,捎琳坊灯绒铅惭闯醛藕沦遥贝骤腰牺澄燃赐拿跪岸藏材迂耀绰钎巳琵寄欺第五章数据库完整性第五章数据库完整性,小结,完整性机制的实施会极大地影响系统性能不同的数据库产品对完整性的支持策略和支持程度是不同的 许多数据库管理系统对完整性机制的支持比对安全性的支持要晚得多也弱得多 数据库厂商对完整性的支持越来越好,不仅在能保证实体完整性和参照完整性而且能在DBMS核心定义、检查和保证用户定义的完整性约束条件,迂肿灶抄前必栖质敦痈摧渔又柔找柴计酵任忙匿批件楼俩唁镁母潭死钙乏第五章数据库完整性第五章数据库完整性,