《数据库系统原理第五章完整性控制幻灯片.ppt》由会员分享,可在线阅读,更多相关《数据库系统原理第五章完整性控制幻灯片.ppt(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、数据库系统原理第五章完整性控制1第1页,共19页,编辑于2022年,星期六 约束对象状态静态:反映DB状态合理性的约束。动态:反映DB状态变迁的约束。约束时机(Immediate constraints)(1)立即约束一条语句执行完后立即检查。(2)延迟约束(deferred constraints)事务执行结束后检查。转帐,从A到B后,帐才能平,才能进行检查。2、静态列级约束对一个列的取值域的约束。数据类型约束类型、长度、单位、精度如XM为C型,长8位;YL为I型,长3位。数据格式约束如工作证号前2位表示省,后3位表示县,后4位表示单位顺序号,后5位表示个人顺序号。2第2页,共19页,编辑于
2、2022年,星期六 值域约束CJ100,NL150,XB=男,女 空值约束是否允许空值列。如CJ可为空。其它约束(如:列的排序、是否唯一等等)3、静态元组约束对一个(仅一个)元组中各列值间联系的约束。如:总额单价工龄年龄4、静态关系约束对一个关系中若干元组之间或若干关系的联系的约束。实体完整性约束;参照完整性约束;函数依赖约束;统计约束;如:职工最低工资不能低于本部门职工平均工资的50%。3第3页,共19页,编辑于2022年,星期六5、动态列级约束修改列定义或列值时的约束。修改定义约束修改定义时新老值间的约束。如:将允许空值列改为不允许空值时,若该列值已有空值,则不可修改。修改值约束修改时新旧
3、值间的约束。如年龄不能修改得更小。6、动态元组约束修改元组时新旧值间的约束。例如新工资不低于原工资+工龄*1.5。7、动态关系约束施加于关系上的前后状态的约束 一致性 原子性 4第4页,共19页,编辑于2022年,星期六5.3 完整性控制完整性控制1、实体完整性(、实体完整性(entity integrity)对关系模式主属性施加的完整性控制。不允许空,在关系中取值唯一例:student(XH,XM,XB,YL)XH不能为空且唯一course(KH,KM)KH不能为空且唯一Sc(XH,KH,CJ)(XH,KH)不能为空且唯一Create table student(XH,Char(6)NOT
4、NULL,);2、参照完整性(、参照完整性(referential integrity)对外码施加的完整性控制。(回忆第二章定义)参照关系:外码所在关系,如SC被参照关系:主码(同时又是另一关系中的外码)所在关系,如student,course。外码:sc中的XH,KH5第5页,共19页,编辑于2022年,星期六1)空值情况 为空(SC中XH为空,表示无这个学生,或无学号学生选修了课程,不合应用语义),或;对应被参照关系中该元组存在;是否可为空,据应用语义确定。DEPT(DH,DM,DD)EMPL(DH,EH,XM)EMPL中DH可为空,表示该职员还未分配到任何部门工作。2)删除被参照关系元组
5、情况 捆绑删除(cascades)参照与被参照关系中相关者一起删除。被参照关系中外码元组删除例如:删除99001号学生(或者01号课程)删去student中XH=99001的元组 (删去course中KH=01的元组)则捆绑删除SC中学号为99001(课号为01)的所有元组参照关系中与被参照关系中码值对应元组删除6第6页,共19页,编辑于2022年,星期六可能层层牵连如:若SC又是另一参照关系的被参照关系,则可能又删除之。受限删除(restricted)参照关系没有一个外码与要删除的被参照关系的主码值相对应时才执行删除。例如:若SC中外码值XH,无一个与主码值(Student.XH,cours
6、e.KH)对应时才删去student、course中相应元组。置空值删除(nullifies/set null)删去被参照关系中元组;参照关系中所有与被参照关系中已删去的主码值相等的外码值置为空值。如:删去部门表中的某个部门,则职员表中原来属于该部门的职员的所属部门号置空。7第7页,共19页,编辑于2022年,星期六 说明上述三种,选择哪一种实施,视应用需求确定。如:学籍管理中,学生毕业了,删去选课及学生信息,故需捆绑删除(course不删)student信息。DBMS提供相应选择机制。3)修改被参照关系主码值情况 捆绑修改(cascades)修改被参照关系中主码值。如修改student中的X
7、H=99003改为XH=99020同时修改参照关系中相等外码值。如:同时SC中所有99003改为99020可能逐层牵连。8第8页,共19页,编辑于2022年,星期六 受限修改(restricted)仅当参照关系中没有一个外码值与被参照关系中某个元组主码值相等时才可修改被参照关系中的该元组主码值。如:仅当SC中学生无99003时,才可修改student中XH=99003。置空值修改(nullifies)修改被参照关系中的主码值;将参照关系中的与该主码值相等的外码置为空值。说明具体应用中,根据应用需求选择上述方法执行。DBMS提供机制支持用户选择。9第9页,共19页,编辑于2022年,星期六3、用
8、户定义完整性(、用户定义完整性(integrity of user definition)1)空值控制对给定属性施加不允许空值限制(NOT NULL)2)单个属性控制为:(CJ is Null)OR(CJ BETWEEN 0 AND 100)3)多属性控制如:XB=男 AND YL=0 AND GRADE=1000);11第11页,共19页,编辑于2022年,星期六例5:ALTER TABLE TEACHER DROP CONSTRAINT C1;ALTER TABLE TEACHER ADD CONSTRAINT C2 CHECK (SAL+DEDUCT=2000 AND SAL=1000)
9、;例6:域的使用 CREATE DOMAIN GenderDomain CHAR(2)CHECK(VALUE IN(男,女);或者 CREATE DOMAIN GenderDomain CHAR(2)CONSTRAINT C3 CHECK(VALUE IN(男,女);ssex GenderDomain,例7:ALTER DOMAIN GenderDomain DROP CONSTRAINT C3;12第12页,共19页,编辑于2022年,星期六4、ORACLE完整性完整性1)实体完整性CREATE TABLE student(XH NUMBER(8),XM VARCHAR(8),YL NUMB
10、ER(3),Constraint PK-XH PRIMARY KEY(XH);一旦定义了主码,则DBMS自动进行完整性检查:主码不能为空;主码值须唯一。13第13页,共19页,编辑于2022年,星期六2)参照完整性 语句FOREIGN KEY:指定外码属性REFERENCES:指定外码对应主码ON DELETE CASCADE:指定捆绑删除要求例:CREATE TABLE SC (XH NUMBER(8),KH NUMBER(3),CJ NUMBER(3),CONSTRAINT FK_SCXH FOREIGN KEY (XH)REFERENCES student(XH)ON DELETE CA
11、SCADE,CONSTRAINT FK_SCKH FOREIGN KEY (KH)REFERENCES course(KH)ON DELETE CASCADE);14第14页,共19页,编辑于2022年,星期六 说明:SC中外码为XH,KH。对应student主码为XH。对应course主码为KH。当修改student中XH时,先检查SC中有无元组XH值与之相等,若有,则不能执行该修改;当修改course中KH,先检查SC中有无元组的KH值与之相等,若有,则不能执行该修改。当删除student或course某元组时,则先在SC中找到相应元组,进行捆绑删除。3)用户定义完整性 列值非空(NOT
12、NULL)列值唯一(UNIQUE)CREAE TABLE COURSE(KH NUMBER(3),KM VARCHAR(20)CONSTRAINT U1 UNIQUE,XS NUMBER(2);15第15页,共19页,编辑于2022年,星期六其中:CONSTRAINT U1 UNIQUE:KM唯一,约束名为U1。列值范围限制例:XB VARCHAR(2)CONSTRAINT CNS_XB1 CHECK(XB IN(男,女);例:GZ NUMBER(8.2)CONSTRAINT CNS_GZ1 CHECK(GZ1000.00);例:CRETATE TRIGGER UPDATE-CJ BEFORE
13、 INSERT OR UPDATE ON CJ FOR EACH ROW WHEN(:NEW.KH=001)AS BEGIN IF :NEW.CJ50 THEN :NEW.CJ :=50;ENDIF END16第16页,共19页,编辑于2022年,星期六说明:利用触发器,当对SC中进入插入元组和修改CJ值时,若为001号课程,则CJ50时一律自动改为50分。定义触发器语句为CREATE OR REPLACE TRIGGER。(先定义后使用)CREATE TRIGGER语句定义触发器的约束条件。一条完整性规则可以用一个五元组(D,O,A,C,P)来形式化地表示,其中:D:数据对象DataO:引发
14、动作地操作OperationA:数据对象必须满足的断言或语义约束AssertionC:选择A作用的数据对象的谓词ConditionP:被触发的过程Procedure例如:教授的工资不得低于1000元。D教师的工资,O修改或插入,A不低于1000元,C职称为教授,P拒绝修改。17第17页,共19页,编辑于2022年,星期六FOR EACH ROW(FOR EACH STATEMENT)删除触发器删除触发器DROP TRIGGER 触发器名 ON 表名18第18页,共19页,编辑于2022年,星期六关于触发器的概念1.触发器名2.表名3.触发事件INSERT/DELETE/UPDATE(OF)4.触发时机BEFORE,AFTER4.触发器类型FOR EACH ROW,FOR EACH STATEMENT5.触发条件WHEN6.触发动作体AS BEGINEND维护数据完整性维护系统安全性触发器的作用?19第19页,共19页,编辑于2022年,星期六