《数据库技术与应用》第5章-习题答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第5章数据库完整性与安全性
1. 什么是数据库的完整性?什么是数据库的安全性?两者之间有什么区别和联系?
解:
数据库的完整性是指数据库中数据的正确性、有效性和相容性,其目的是防止不符合语义、不正确的数据进入数据库,从而来保证数据库系统能够真实的反映客观现实世界。
数据库安全性是指保护数据库,防止因用户非法使用数据库造成数据泄露、更改或破坏。
数据的完整性和安全性是两个不同的概念,但是有一定的联系:
前者是为了防止数据库中存在不符合语义的数据,防止错误信息的输入和输出,即所谓垃圾进垃圾出所造成的无效操作和错误结果。后者是保护数据库防止恶意的破坏和非法的存取。也就是说,安全性措施的防范对象是非法用户和非法操作,完整性措施的防范对象是不合语义的数据。
2. 什么是数据库的完整性约束条件?完整性约束条件可以分为哪几类?
解:
完整性约束条件是指数据库中的数据应该满足的语义约束条件。一般可以分为六类:静态列级约束、静态元组约束、静态关系约束、动态列级约束、动态元组约束、动态关系约束。静态列级约束是对一个列的取值域的说明,包括以下几个方面:①数据类型的约束,包括数据的类型、长度、单位、精度等;②对数据格式的约束;③对取值范围或取值集合的约束;
④对空值的约束;⑤其他约束。静态元组约束就是规定组成一个元组的各个列之间的约束关系,静态元组约束只局限在单个元组上。静态关系约束是在一个关系的各个元组之间或者若干关系之间常常存在各种联系或约束。常见的静态关系约束有:①实体完整性约束;②参照完整性约束;③函数依赖约束。动态列级约束是修改列定义或列值时应满足的约束条件,包括下面两方面:①修改列定义时的约束;②修改列值时的约束。动态元组约束是指修改某个元组的值时需要参照其旧值,并且新旧值之间需要满足某种约束条件。动态关系约束是加在关系变化前后状态上的限制条件,例如事务一致性、原子性等约束条件。
3. 试述DBMS如何实现完整性控制。
解:
为了维护数据库的完整性,DBMS提供了以下三种机制:
①完整性约束条件定义完整性约束条件也称为完整性规则,是数据库中的数据必须满足的语义约束条件。SQL标准使用了一系列概念来描述完整性,包括关系模型的实体完整性、参照完整性和用户定义完整性。这些完整性一般由SQL的DDL语义来实现。它们作为数据库模式的一部分存入数据字典中。
②完整性检查方法检查数据是否满足已定义的完整性约束条件称为完整性检查。一般在INSERT、UPDATE、DELETE语句执行后开始检查,也可以在事务提交时检查。检查这些操作执行后数据库中的数据是否违背了完整性约束条件。
③违约处理若发现用户操作违背了完整性约束条件,应采取一定的措施,如拒绝(NOACTION)执行该操作,或级连(CASCADE)执行其它操作,进行违约处理以保证数据的完整性。
4. 现有以下四个关系模式:
供应商(供应商编号,姓名,电话,地点),其中供应商编号为主码;
零件(零件编号,零件名称,颜色,重量),其中零件编号为主码;
工程(工程编号,工程名称,所在地点),其中工程编号为主码;
供应情况(供应商编号,零件编号,工程编号,数量),其中供应商编号,零件编号,工程编号为主码
用SQL语句定义这四个关系模式,要求在模式中完成以下完整性约束条件的定义:
①定义每个模式的主码;
②定义参照完整性;
③定义零件重量不得超过100千克。
解:
CREATE SCHEMA Supplier_schema
CREATE TABLE Supplier
( Sno CHAR(5) PRIMARY KEY,
Sname CHAR(20) NOT NULL,
Phone CHAR(13),
Address CHAR(30)
);
CREATE SCHEMA Part_schema
CREATE TABLE Part
( Pno CHAR(7) PRIMARY KEY,
Pname CHAR(20) NOT NULL,
Color CHAR(10),
Weight SMALLINT CHECK(Weight <=100)
);
CREATE SCHEMA Project_schema
CREATE TABLE Project
( Jno CHAR(7) PRIMARY KEY,
Jname CHAR(20) NOT NULL,
Jaddress CHAR(30)
);
CREATE SHEMA SPJ_shema
CREATE TABLE SPJ
( Sno CHAR(5),
Pno CHAR(7),
Jno CHAR(7),
Quantity SMALLINT,
PRIMARY KEY (Sno, Pno, Jno),
FOREIGN KEY (Sno) REFERENCES Supplier(Sno),
FOREIGN KEY (Pno) REFERENCES Part(Pno),
FOREIGN KEY (Jno) REFERENCES Project(Jno)
);
5. 在关系数据库系统中,当操作违反实体完整性、参照完整性和用户自定义的完整性约束条件时,一般是如何分别进行处理的。
解:
(1) 按实体完整性规则自动进行检查。包括:
①检查主码值是否唯一,如果不唯一则拒绝插入或修改。
②检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改。
(2) 按参照完整性检查,违约处理的策略如下:
①拒绝(NO ACTION)执行。不允许该操作执行,该策略一般设置为默认策略。
在被参照关系中删除元组:仅当参照关系中没有任何元组的外码值与被参照关系中要删除元组的主码值相同时,系统才执行删除操作,否则拒绝此操作。
②级联(CASCADE)操作。当删除或修改被参照表的一个元组造成了与参照表的不一致,则删除或修改参照表中的所有造成不一致的元组。
级联操作必须在定义外码时给出显式定义。
③设置为空值(SET NULL)。当删除或修改被参照表的一个元组时造成了不一致,则将参照表中的所有造成不一致的元组的对应属性设置为空值。
④置空值删除(NULLIFIES)。删除被参照关系的元组,并将参照关系中相应元组的外码值置空值。
(3) 按用户自定义完整性检查,违约处理:当往表中插入元组或修改属性的值时,RDBMS就检查属性上的约束条件是否被满足,如果不满足则操作被拒绝执行。
6. 触发器的作用是什么?同一表上的多个触发器被激活时遵循的执行顺序是什么?
解:
触发器是用户定义在关系表上的一类由事件驱动的特殊过程,它不需要由用户调用执行,而是在用户对表中的数据进行UPDATE、INSERT或DELETE操作时自动触发执行。它可以实现数据库中相关表的级联修改,能实现比CHECK语句更为复杂的约束,能提供数据库修改前后数据变化的前后状态,能维护非规范化数据。
同一表上的多个触发器激活时遵循以下执行顺序:
①执行该表上的BERORE触发器;
②激活触发器的SQL语句;
③执行该表上的AFTER触发器。
此外,对于同一个表上的多个BEFORE(AFTER)触发器,遵循“谁先创建谁先执行”的原则,即按照触发器创建的时间先后顺序执行。有些RDBMS是按照触发器名称的字母排序顺序来执行触发器的。
7. 什么是“权限”?用户访问数据库有哪些权限?对数据模式进行修改有哪些权限?
解:
用户(或应用程序)使用DB的方式称为权限。
用户访问数据库有四种权限:Read(读权限)、Insert(插入)、Update(修改)和Delete (修改)。
用户对数据模式进行修改有四种权限:Index(索引权限:允许用户创建和删除索引),Resource(资源权限:允许用户创建新的关系)、Alteration(修改权限:允许用户在关系结构中加入或删除属性)和Drop(撤销权限:允许用户撤销关系)。
8. 安全性措施中的强制存取控制是如何实现的?
解:
对每个数据对象赋予一定的密级,级别从高到低有:绝密级、机密级、秘密级、公用级,每个用户也具有相应的级别,称为许可证级别,密级和许可证级别都是有序的,如绝密>机