第五章数据库完整性一、选择题1.有一个关系:学生(学号,姓名,系别),规定学号的值域是8个数字组成的字符串,这一规则属于__________。
A 实体完整性约束B 参照完整性约束C 用户自定义完整性约束D 关键字完整性约束【解答】C2.完整性约束有两大类型,其中一种是静态约束,下面( c )不属于静态约束。
A.固有约束B.隐含约束C.语义约束D.显示约束【解答】C3.数据库的破坏一般来自四个方面,其中__________是属于完整性约束问题。
A.系统故障B.并发所引起的数据不一致C.人为的破坏D.输入或更新数据库的数据有误,更新事务未遵守保持数据库一致性的原则【解答】D4. ________子句能够实现关系参照性规则。
A. PRIMARY KEYB. NOT NULLC. FOREIGN KEYD. FOREIGN KEY...REFERENCES... 【解答】D二、填空题1. 数据库的是指数据的正确性和相容性【解答】完整性2.完整性约束是指和。
【解答】实体完整性,参照完整性3.实体完整性是指在基本表中,。
【解答】主属性不能取空值4.参照完整性是指在基本表中,。
【解答】外码可以是空值或者另一个关系主码的有效值5.SQL标准使用了一系列概念来描述完整性,包括关系模型的________ 、________和________完整性。
【解答】实体完整性参照完整性用户定义6.数据库完整性的定义一般由SQL的________ 语句来实现。
它们作为数据库模式的一部分存入________中。
【解答】DDL 数据字典7.关系模型的实体完整性在________ 中用________定义。
【解答】CREATE TABLE 、PRIMARY KEY二、问答题1.什么是数据库的完整性? DBMS的完整性子系统的功能是什么?【解答】数据库完整性是指数据库中数据的正确性、有效性和相容性。
DBMS 的完整性控制机制至少包括完整性约束的定义机制和完整性约束的检查机制。
DBMS完整性子系统的功能是:(1)监督事务的执行,并测试是否违反完整性规则;(2)如有违反,则采取恰当的操作,如拒绝、报告违反情况,改正错误等方法进行处理。
2.完整性规则由哪几个部分组成?关系数据库的完整性规则有哪几类?【解答】完整性规则由三部分组成:触发条件:即什么时候使用规则进行检查;约束条件:即要检查什么样的错误;ELSE子句:即查出错误后该如何处理。
完整性规则有以下三类:域完整性规则,用于定义属性的取值范围;域联系的规则,定义一个或多个关系中,属性值间的联系、影响和约束。
关系完整性规则,定义更新操作对数据库中值的影响和限制。
3.试详述SQL中的完整性约束机制?【解答】SQL中的完整性约束规则有主键约束、外键约束、属性值约束和全局约束等多种形式。
△主键约束。
它是数据中最重要的一种约束。
在关系中主键值不允许空,也不允许出现重复,体现了关系要满足实体完整性规则。
主键可用主键子句或主键短语进行定义。
△外键约束。
根据参照完整性规则,依赖关系中外键或者为空值,或者是基本关系(参照关系)中的该键的某个值。
外键用外键关系子句定义,并考虑删除基本关系元组或修改基本关系的主键值的影响,依赖关系可按需要采用RESTRICT、SET NULL、CASCADE方式。
△属性值约束。
当要求某个属性的值不允许空值时,那么可以在属性定义后加上关键字:NOT NULL ,这是非空值约束。
还可以用CHECK子句对一个属性值加以限制以及使用域约束子句CREAT DOMAIN 定义新域并加以属性值检查。
△全局约束。
在关系定义时,可以说明一些比较复杂的完整性约束,这些约束涉及到多个属性间的联系或不同关系间的联系,称为全局约束。
主要有基于元组的检查子句和断言。
前者是对单个关系的元组值加以约束,后者则可对多个关系或聚合操作有关的完整性约束进行定义。
4. DBMS的完整性控制机制应具有哪些功能?【解答】DBMS的完整性控制机制应具有三个方面的功能:1)定义功能,即提供定义完整性约束条件的机制;2)检查功能,即检查用户发出的操作请求是否违背了完整性约束条件;3)违约反应,即如果发现用户的操作请求使数据违背了完整性约束条件,则采取一定的动作来保证数据的完整性。
5.RDBMS在实现参照完整性时需要考虑哪些方面?【解答】RDBMS在实现参照完整性时需要考虑以下几个方面:(1)外码是否可以接受空值。
(2)删除被参照关系的元组时的考虑,这时系统可能采取的作法有三种:1)级联删除(CASCADES);2)受限删除(RESTRICTED);3)置空值删除(NULLIFIES)。
(3)在参照关系中插入元组时的问题,这时系统可能采取的作法有:1)受限插人;2)递归插入。
(4)修改关系中主码的问题。
一般是不能用UPDATE语句修改关系主码。
如果需要修改主码值,只能先删除该元组,然后再把具有新主码值的元组插入到关系中。
如果允许修改主码,首先要保证主码的惟一性和非空,否则拒绝修改。
然后要区分是参照关系还是被参照关系。
6.DBMS的完整性控制机制应具有哪些功能?【解答】DBMS的完整性控制机制应具有三个方面的功能:(1)定义功能,即提供定义完整性约束条件的机制;(2)检查功能,即检查用户发出的操作请求是否违背了完整性约束条件;(3)违约反应:如果发现用户的操作请求使数据违背了完整性约束条件,则采取一定的动作来保证数据的完整性。
7. 职工(职工号,姓名,年龄,职务,工资,部门号),其中职工号为主码;部门(部门号,名称,经理名,电话),其中部门号为主码。
用SQL语言定义这两个关系模式,要求在模式中完成以下完整性约束条件的定义:(1)定义每个模式的主码;(2)定义参照完整性;(3)定义职工年龄不得超过60岁。
【解答】定义部门:CREATE TABLE DEPT(Deptno NUMBER(2),Deptname V ARCHAR(10),Manager V ARCHAR(10),PhoneNumber Char(12)CONSTRAINTPK_SC PRIMARY KEY(Depmo));定义职工:CREATE TABLE EMP(Empno NUMBER(4),Ename V ARCHAR(10),Age NUMBER(2),CONSTRAINT C1 CHECK(Aage<=60),Job V ARCHAR(9),Sal NUMBER(7,2),Deptno NUMBER(2),CONSTRAINT FK_DEPTNOFOREIGN KEY(Deptno)REFERENCES DEPT(Depmo));8.参照完整性规则在SQL可以用哪几种方式实现?删除基本关系的元组时,依赖关系可以采取的做法有哪三种?修改基本关系的主键值时,依赖关系可以采取的做法有哪三【解答】参照完整性规则要求"不引用不存在的实体",参照完整性规则在SQL可用以下几种方式实现:(1)在SQL中采用外键子句定义外键,并考虑删除基本关系元组或修改基本关系的主键值,对依赖关系产生的影响;(2)在属性值上进行约束如基于属性的检查;(3)全局约束中的基于元组的检查子句等。
删除基本关系元组或修改基本关系的主键值时,依赖关系可以采用的做法有:△RESTRICT方式:只有当依赖关系中没有一个外键值与基本关系中要删除/修改的主键值相对应时,系统才能执行删除/修改操作,否则拒绝删除或修改。
△SET NULL方式:删除基本元组时,将依赖关系中所有与基本关系中被删除主键值相对应的外键值置为空值。
修改基本关系的主键值时,将依赖关系中所有与基本关系中被修改主键值相对应的外键值置为空值。
△CASCADE方式:若删除则将依赖关系中所有外键值与基本关系中要删除的主键值相对应的元组一并删除,若修改则将依赖关系中所有与基本关系中要修改的主键值相对应的外键值一并修改为新值。
9.设教学数据库的模式如下:S(S#,SNAME,AGE,SEX)SC(S#,C#,GRADE)C(C#,CNAME,TEACHER)试用多种方式定义下列完整性约束:(1)在关系S中插入学生年龄值应在16~25岁之间(2)在关系SC中插入元组时,其S#值和C#值必须分别在S和C中出现。
(3)在关系SC中修改GRADE值时,必须仍在0~100之间。
(4)在删除关系C中一个元组时,首先要把关系SC中具有同样C#的元组全部删去。
(5)在关系S中把某个S#值修改为新值时,必须同时把关系SC中那些同样的S#值也修改为新值。
【解答】(1)定义S时采用检查子句:CREAT TABLE S(S# CHAR(4),SNAME char (10) NOT NULL ,AGE SMALLINT ,PRIMARY key(S#),CHECK (AGE>=16 and AGE<=25) )(2)采用外键子句约束CREAT TABLE SC(S# CHAR(4),C# CHAR(4),GRADE SMALLINT,FOREIGN key(S#) REFERENCE S(S#),FOREIGN key(C#) REFERENCE C(C#) )(3)采用元组检查CREAT TABLE SC(S# CHAR(4),C# CHAR(4),GRADE SMALLINT,FOREIGN key(S#) REFERENCE S(S#),FOREIGN key(C#) REFERENCE C(C#),CHECK (GRADE>=0 and AGE<=100) )(4)采用外键约束CREAT TABLE SC(S# CHAR(4),C# CHAR(4),GRADE SMALLINT,FOREIGN key(S#) REFERENCE S(S#),FOREIGN key(C#) REFERENCE C(C#) )若改为:在删除关系C中一个元组时,同时把关系SC中具有同样C#的元组全部删去,则为:FOREIGN key(C#) REFERENCE C(C#) ON DELETE CASCADE(5)采用外键约束CREAT TABLE SC(S# CHAR(4),C# CHAR(4),GRADE SMALLINT,FOREIGN key(S#) REFERENCE S(S#) ON UPDATE CASCADE ,FOREIGN key(C#) REFERENCE C(C#) )10.在教学数据库的关系S、SC、C中,试用SQL2的断言机制定义下列两个完整性约束:(1)学生必须在选修Maths课后,才能选修其他课程。
(2)每个男学生最多选修20门课程【解答】(1) CREAT ASSERTION ASSE1 CHECK( NOT EXISTS( SELECT S FROM SCWHERE C# IN(SELECT C#FROM CWHERE CNAME<>'MATHS')AND S# NOT IN(SELECT S# FROM SCWHERE C# IN(SELECT C#FROM CWHERE CNAME='MATHS')));(2) CREAT ASSERTION ASSE2 CHECK( ALL(SELECT COUNT (SC.C#)FROM S,SCWHERE S.S#=SC.S AND SEX='M'GROUP BY S#)<=20);。