数据库系统概论第5版(王珊、萨师煊)课后答案第5章 数据库完整性 下载本文

内容发布更新时间 : 2024/6/18 6:35:17星期一 下面是文章的全部内容请认真阅读。

第5章数据库完整性

1. 什么是数据库的完整性?

答: 数据库的完整性是指数据的正确性和相容性。

2. 数据库的完整性概念与数据库的安全性概念有什么区别和联系?

答: 数据的完整性和安全性是两个不同的概念,但是有一定的联系。

前者是为了防止数据库中存在不符合语义的数据,防止错误信息的输入和输出,即所谓垃圾进垃圾出(Garba : e In Garba : e out )所造成的无效操作和错误结果。

后者是保护数据库防止恶意的破坏和非法的存取。也就是说,安全性措施的防范对象是非法用户和非法操作,完整性措施的防范对象是不合语义的数据。 3. 什么是数据库的完整性约束条件?

答:完整性约束条件是指数据库中的数据应该满足的语义约束条件。

一般可以分为六类:静态列级约束、静态元组约束、静态关系约束、动态列级约束、动态元组约束、动态关系约束。

常见的静态关系约束有:实体完整性约束;参照完整性约束;函数依赖约束。

4. 关系DBMS 的完整性控制机制应具有哪些功能?

答: DBMS 的完整性控制机制应具有三个方面的功能: 1) 定义功能,即提供定义完整性约束条件的机制;

2) 检查功能,即检查用户发出的操作请求是否违背了完整性约束条件;

3) 违约反应:如果发现用户的操作请求使数据违背了完整性约束条件,则采取一定

的动作来保证数据的完整性。

5. 关系DBMS 在实现参照完整性时需要考虑哪些方面?

答:关系DBMS 在实现参照完整性时需要考虑以下几个方面: 1) 外码是否可以接受空值。

2) 被参照关系中删除元组或修改主码时,若使参照关系在被参照关系中找不到与之

相等的属性值,系统可选择的作法有三种:拒绝执行(默认策略)、级联操作、设置为空值。

3) 参照关系中插入或修改元组时,若使参照关系在被参照关系中找不到与之相等的

属性值,系统可选择的作法有三种:拒绝执行(默认策略)、级联操作(CASCADE)、设置为空值。

6. 假设有下面两个关系模式:

职工(职工号,姓名,年龄,职务,工资,部门号),其中职工号为主码; 部门(部门号,名称,经理名,电话),其中部门号为主码。

用sQL语言定义这两个关系模式,要求在模式中完成以下完整性约束条件的定义: 1) 定义每个模式的主码; 2) 定义参照完整性;

3) 定义职工年龄不得超过 60 岁。

CREATE TABLE 职工

(职工号 CHAR(10),

姓名CHAR(10), 年龄NUMERIC (3),

CONSTRAINT C1 CHECK (年龄<=60),

职务 CHAR(12) , 工资 CHAR(15), 部门号 CHAR(10),

CONSTRAINT 职工_KEY PRIMARY KEY(职工号), FOREIGN KEY(部门号) REFERENCES 部门(部门号)

);

CREATE TABLE 部门 (部门号CHAR(5), 名称 CHAR(10), 经理名 CHAR(10), 电话 INT(11),

CONSTRAINT部门_KEY PRIMARY KEY(部门号) );

7. 关系系统中,当操作违反实体完整性、参照完整性和用户定义的完整性约束条件时,一

般是如何分别进行处理的?

答: 对于违反实体完整性和用户定义的完整性的操作一般都采用拒绝执行的方式进行处理。而对于违反参照完整性的操作,并不都是简单地拒绝执行,有时要根据应用语义执行一些附加的操作,以保证数据库的正确性。 8. 某单位想举行一个小型的联谊会,关系Male记录注册的男宾信息,关系Female记录注

册的女宾信息。建立一个断言,将来宾的人数限制在50人以内。(提示,先创立关系Female和关系Male。) CREATE TABLE Female

(Fid INT(5) PRIMARY KEY, FnameCHAR(10) NOT NULL, Fage NUMERIC (3) NOT NULL, FsdeptCHAR(20),

FnumINT(11)NOT NULL, FcharacterCHAR(20), FsportsCHAR(20) );

CREATE TABLE Male

(Mid INT(5) PRIMARY KEY, MnameCHAR(10) NOT NULL, Mage NUMERIC(3) NOT NULL, MsdeptCHAR(20),

MnumINT(11)NOT NULL, McharacterCHAR(20), MsportsCHAR(20) );

CREATE ASSERTION count_people

CHECK(50<(SELECT COUNT(Female.*)+COUNT(Male .*) AS num FROM Male,Female)

);