当前位置:文档之家› 数据库原理与应用(清华大学版)课后答案第13章 数据库完整性

数据库原理与应用(清华大学版)课后答案第13章 数据库完整性

数据库完整性
练习题13及参考答案
1.什么是数据完整性如果数据库不实施数据完整性会产生什么结果
答:数据完整性是指数据的正确性、完备性和一致性,是衡量数据库质量好坏的重要标准。

如果数据库不实施数据完整性,在用INSERT 、DELETE 、UPDATE 语句修改数据库内容时,数据的完整性可能会遭到破坏,就可能会存在下列情况:无效的数据被添加到数据库的表中,如:将学生考试成绩输入成负数;对数据库的修改不一致,如:在一个表中修改了某学生的学号,但该学生的学号在另外一个表中却没有得到修改;将存在的数据修改为无效的数据,如:将某学生的班号修改为并不存在的班级号。

2.数据完整性有哪几类如何实施它们分别在什么级别上实施
答:数据完整性分为以下3类:
(1)域完整性:是指一个列的输入有效性,是否允许为空值。

强制域完整性的方法有:限制类型(通过设定列的数据类型)、格式(通过CHECK 约束和规则)或可能值的范围(通过FOREIGN KEY 约束、CHECK 约束、DEFAULT 定义、NOT NULL 定义和规则)。

如:学生的考试成绩必须在0~100之间,性别只能是“男”或“女”。

(2)实体完整性:是指保证表中所有的行唯一。

实体完整性要求表中的所有行都有一个唯一标识符。

这个唯一标识符可能是一列,也可能是几列的组合,称之为主键。

也就是说,表中的主键在所有行上必须取唯一值。

强制实体完整性的方法有:索引、UNIQUE 约束、PRIMARY KEY 约束或IDENTITY 属性。

如:student 表中sno (学号)的取值必须唯一,它第 章 13
唯一标识了相应记录所代表的学生,学号重复是非法的。

学生的姓名不能作为主键,因为完全可能存在两个学生同名同姓的情况。

(3)参照完整性:是指保证主关键字(被引用表)和外部关键字(引用表)之的参照关系。

它涉及两个或两个以上表数据的一致性维护。

外键值将引用表中包含此外键的记录和被引用表中主键和外键相匹配的记录关联起来。

在输入、更改或删除记录时,参照完整性保持表之间己定义的关系,确保键值在所有表中一致。

这样的一致性要求确保不会引用不存在的值,如果键值更改了,那么在整个数据库中,对该键值的所有引用要进行一致的更改。

参照完整性是基于外键与主键之间的关系。

例如学生学习课程的课程号必须是有效的课程号,表score表(成绩表)的外键cno(课程号)将参考表course表(课程表)中主键cno(课程号)以实现数据完整性。

域完整性、实体完整性及参照完整性分别在列、行、表上实施。

数据完整性任何时候都可以实施,但对己有数据的表实施数据完整性时,系统要先检查表中的数据是否满足所实施的完整性,只有表中的数据满足了所实施的完整性,数据完整性才能实施成功。

3.什么是主键约束什么是唯一性约束两者有什么区别
答:主键约束保证某一列或一组列值的组合相对于表中的每一行都是唯一的,这些列就是该表的主键。

主键不允许有重复值,也不允许有空值。

唯一约束限制表中指定列上所有的非空值必须唯一,即表中任意两行在指定列上都不允许有相同的值。

唯一约束和主键约束的区别是:
(1)唯一约束与主键约束都为指定的列建立唯一索引,即不允许唯一索引的列上有相同的值。

主键约束限制更严格,不但不允许有重复值,而且也不允许有空值。

(2)唯一约束与主键约束产生的索引可以是聚簇索引也可以是非聚簇索引,但在缺省情况下唯一约束产生非聚簇索引,主键约束产生聚簇索引。

4.创建PRIMARY KEY约束或UNIQUE约束时,SQL Server创建索引了吗与创建标准索引相比哪个更好
答:创建PRIMARY KEY约束或UNIQUE约束时,SQL Server创建唯一性索引。

与创建
标准索引相比,通过创建PRIMARY KEY约束或UNIQUE约束来创建索引更好。

上机实验题8及操作过程
在上机实验题7的factory数据库上,使用T-SQL语句完成如下各题:
(1)实施worker表的“性别”列默认值为“男”的约束。

(2)实施salary表的“工资”列值限定在0~9999的约束。

(3)实施depart表的“部门号”列值唯一的非聚集索引的约束。

(4)为worker表建立外键“部门号”,参考表depart的“部门号”列。

(5)建立一个规则sex:@性别='男' OR @性别='女',将其绑定到worker表的“性别”列上。

(6)删除(1)小题所建立的约束。

(7)删除(2)小题所建立的约束。

(8)删除(3)小题所建立的约束。

(9)删除(4)小题所建立的约束。

(10)解除(5)小题所建立的绑定并删除规则sex。

操作过程
(1)对应的程序如下:
USE factory
GO
ALTER TABLE worker
ADD CONSTRAINT default_sex DEFAULT '男' FOR 性别
GO
(2)对应的程序如下:
USE factory
GO
ALTER TABLE salary
ADD CONSTRAINT check_salary CHECK(工资>0 AND 工资<9999)
GO
(3)对应的程序如下:
USE factory
GO
ALTER TABLE depart
ADD CONSTRAINT unique_depart UNIQUE NONCLUSTERED(部门号)
GO
EXEC sp_helpindex depart --显示depart表上的索引
GO
执行结果如下:
index_name index_description index_keys ------------ ------------------------------------------------ ------
PK_depart clustered,unique,primary key located on PRIMARY 部门号unique_depart nonclustered,unique,unique key located on PRIMARY 部门号(4)对应的程序如下:
USE factory
GO
ALTER TABLE worker
ADD CONSTRAINT FK_worker_no
FOREIGN KEY(部门号)
REFERENCES depart(部门号)
GO
(5)对应的程序如下:
USE factory
GO
CREATE RULE sex AS @性别='男' OR @性别='女'
GO
EXEC sp_bindrule 'sex','worker.性别' GO
(6)对应的程序如下:
USE factory
GO
ALTER TABLE worker
DROP CONSTRAINT default_sex
GO
(7)对应的程序如下:
USE factory
GO
ALTER TABLE salary
DROP CONSTRAINT check_salary
GO
(8)对应的程序如下:
USE factory
GO
ALTER TABLE depart
DROP CONSTRAINT unique_depart
GO
(9)对应的程序如下:
USE factory
GO
ALTER TABLE worker
DROP CONSTRAINT FK_worker_no
GO
(10)对应的程序如下:
USE factory
GO
EXEC sp_unbindrule 'worker.性别' GO
DROP RULE sex
GO。

相关主题