关系数据库与SQL Server(2019版)
上QQ阅读APP看书,第一时间看更新

项目1.5 规范化关系数据模型

在关系数据库中,对于同一个问题,选用不同关系模式集合作为数据库模式,其性能的优劣是大不相同的,某些数据库模式的设计常常会带来存储异常,这不利于实际应用。为区分数据库模式的优劣,常常把关系模式分为各种不同等级的范式(Normal Form)。

任务1.5.1 了解关系规范化

1.关系规范化的含义

通常将关系模式分为5个级别,即5种范式。满足最低条件的称为第一范式,简称1NF。在第一范式基础上进一步满足一些要求的可升级为第二范式(2NF),其余依次类推。通常,关系模式R是第X范式就写成R∈XNF。

一个低一级范式的关系模式,通过分解可以转换为若干个高一级范式的关系模式,这种过程称为关系的规范化。

2.关系规范化的作用

关系规范化的主要目的是解决数据库中数据冗余、插入异常、删除异常和更新异常等数据存储问题。例如,在关系模式SCD(学号,姓名,课程名,成绩,教师名,职称)中,如果有200名学生学习了数据库基础这门课程,那么在SCD表中,就必须重复输入200次教师的名字和教师的职称信息,因此这种关系模式存在数据冗余的问题;如果要在SCD表中插入刘强老师的姓名和职称信息,但刘强老师未开课,那么会造成无法插入主键(学号+课程名)的值,因此这种关系模式还存在插入异常的问题;当删除了SCD表中数据库基础这门课程的信息时,同时也会删除相关任课教师的信息,因此这种关系模式又存在删除异常的问题;当某个教师的职称发生变化时,除了要更新SCD表中的职称信息,还需要更新教师表中的职称信息,这样不仅加大了维护工作量,还容易造成表间的数据不一致问题,因此这种关系模式还存在更新异常的问题。

所以,要将关系数据模型进行规范化。

3.关系规范化的方法

关系规范化的基本方法是逐步消除关系模式中不合适的数据依赖,使关系模式达到某种程度的分离,也就是说,不要将若干事物混在一起,而要彼此分开,用一个关系表示一事或一物,所以,规范化的过程也被认为是“单一化”的过程。

规范化是以函数相关性理论为基础的,其中最重要的是函数依赖,其定义如下。

给定一个关系模式R,有属性(或属性组)A和B,如果B的每个值都与A的唯一确定值对应,则称B函数依赖于A,A被称为决定因素。如果B的每个值完全能由A值决定,则称B完全函数依赖于A。如果B的每个值只依赖于A中的部分属性,则称B部分函数依赖于A。如果关系模式R中有属性A、B、C,C函数依赖于B,B函数依赖于A,则称C传递函数依赖于A。

下面通过任务1.5.2~任务1.5.5来认识各级范式。

任务1.5.2 认识第一范式(1NF)

设R是一个关系模式,如果R中的每个属性都是不可分解的,则称R是第一范式,记为R∈1NF。

1NF要求不能表中套表。它是对关系模式最基本的要求,数据库模式中的所有关系模式都必须是1NF。

请思考:

前面提到的关系模式SCD(学号,姓名,……)是否是1NF?

【例1-4】判断如表1-11所示的SC1表是否是1NF?若不是,如何修改?

分析:该SC1表不是1NF,因为每个元组的课程名中都包含了若干门课程,是可以分解为若干单门课程的。对于这样的关系模式,修改某个学生的选课情况,涉及该学生原来的所有课程名,这是很不方便的。为避免这样的问题,可以将选修关系SC1的课程名属性拆开,形成如表1-12所示的SC2关系形式。显然,SC2∈1NF。

表1-11 SC1

表1-12 SC2

任务1.5.3 认识第二范式(2NF)

1.第二范式的含义

如果关系模式R是1NF,且每个非键属性都完全函数依赖于键属性,则称R是第二范式,记为R∈2NF。

如果关系模式中存在部分函数依赖,则会造成插入异常。在2NF中,不存在非键属性对键属性的部分函数依赖关系,因此2NF解决了插入异常问题。

例1-5】 判断关系模式“SCD(学号,姓名,课程名,成绩,学院名称,院长)”是否是2NF?为什么?

分析:该关系模式是1NF,但不是2NF。因为该关系模式的键是(学号+课程名),对于非键属性,如姓名、学院名称、院长来说,它们只依赖于学号,而与课程名无关。

那么,要如何将其转化为2NF呢?

2.转化为2NF的方法

将非2NF的关系模式转化为2NF的办法是消除部分函数依赖,将其分解为若干个2NF关系模式。消除的方法如下。

1)把关系模式中对键完全函数依赖的非主属性与决定它们的键放在一个关系模式中。

2)把对键部分函数依赖的非主属性和决定它们的主属性放在一个关系模式中。

3)如果分解后的新模式仍不是2NF,则继续按照前面的方法进行分解,直到达到要求。

在关系模式SCD中,成绩完全函数依赖于键(学号+课程名),可将它们放在一个关系模式中,如:SD(学号,姓名,学院名,院长);姓名、学院名、院长只依赖于学号,可将它们放在另一个关系模式中,如:SC(学号,课程名,成绩)。分解后的关系模式SD和SC中都不存在部分函数依赖,所以它们都是2NF。

3.2NF存在的问题

2NF虽然消除了数据的插入异常,但仍然存在其他存储问题。例如:关系模式SD既包含学生信息,又包含学院信息,所以仍存在问题,须进一步分解。这就需要更高级别的范式。

任务1.5.4 认识第三范式(3NF)

1.第三范式的含义

如果关系模式R是2NF,且没有一个非键属性传递依赖于键,则称R是第三范式,记为R∈3NF。

如果关系模式中存在传递函数依赖,则会造成删除异常。在3NF中,消除了传递函数依赖,因此3NF解决了数据的删除异常问题。

例1-6】 判断关系模式“SD(学号,姓名,学院名称,院长)”是否是3NF?为什么?

分析:该关系模式是2NF,但不是3NF。因为该关系模式中存在着:主键学号决定非键属性学院名(学号→学院名)、学院名决定院长(学院名→院长),即院长传递函数依赖于学号,因此关系模式SD不是3NF。

那么,要如何将其转化为3NF呢?

2.转化为3NF的方法

将非3NF的关系模式转化为3NF的办法是消除传递函数依赖,将其进一步分解为若干个独立的第三范式关系模式。消除的方法如下。

1)把直接对键函数依赖的非主属性与决定它们的键放在一个关系模式中。

2)把造成传递函数依赖的决定因素连同被它们决定的属性放在一个关系模式中。

3)如果分解后的新模式不是3NF,则继续按照前面的方法进行分解,直到达到要求。

在关系模式SD中,姓名、学院名直接依赖主属性学号,可将它们放在一个关系模式中,如:S(学号,姓名,学院名);学院名决定院长,学院名是造成传递函数依赖的决定因素,将它们放在另一个关系模式中,如:D(学院名,院长)。

可以看出,关系模式S和D各自描述单一的现实事物,都不存在传递依赖关系,所以它们都是3NF。

3.3NF存在的问题

一个关系模式达到3NF,基本解决了异常问题,但还不能彻底解决数据冗余问题。因为3NF不能很好地处理模型中含有多个候选键和候选键是组合项的情况,因此需要更强的范式。

【课堂实践4】

假设某商业集团数据库中有1个关系模式R(商店编号,商品编号,数量,部门编号,负责人),如果规定:每个商店的每种商品只在一个部门销售;每个商店的每个部门只有一个负责人;每个商店的每种商品只有一个库存数量。

1)写出关系模式R的基本函数依赖集。

2)找出关系模式R的候选键。

3)关系模式R最高已经达到第几范式?为什么?

4)如果R不属于3NF,请将R分解成3NF。

任务1.5.5 了解Boyce-Codd范式(BCNF)

1.Boyce-Codd范式的含义

Boyce-Codd范式(BCNF)也称为扩充的第三范式或增强第三范式。

如果关系模式R中的所有决定因素都是键,则称R是BCNF。BCNF消除了关系中冗余的键,由BCNF的定义,可以得到以下结论。

1)所有非主属性对每个键完全函数依赖。

2)所有主属性对每个不包含它的键完全函数依赖。

3)没有任何属性完全函数依赖于非键的任何一组属性。

可以证明,若R是BCNF,则R肯定是3NF。但若R是3NF,则R不一定是BCNF。

例如:学生关系模式S(学号,姓名,学院名)不仅是3NF,还是BCNF。

分两种情况进行分析。一种情况假设姓名可以有重名,则学号是该模型唯一决定因素,它又是键,所以关系模式S是BCNF。另一种情况假设姓名没有重名,则学号、姓名都是候选键,且除候选键以外,该模型没有其他决定因素,所以关系模式S仍是BCNF。

例1-7】 有关系模式STJ(学生,教师,课程),假设:

1)每位教师只教一门课程。

2)一门课程由多位教师讲授。

3)对于每门课,每个学生的讲课教师只有一位。请判断STJ是不是BCNF。

分析:由语义可知,关系模式STJ具有的函数依赖是:(学生,课程)→教师,教师→课程,(学生,教师)→课程,如图1-7所示。

图1-7 非BCNF实例

关系模式STJ有两个候选键(学生,课程)和(学生,教师),由于没有任何非主属性对键传递依赖或部分依赖,因此模式STJ是3NF。但它不是BCNF,因为教师决定课程,教师是课程的决定因素,而教师这一单一属性不是键,因此,模式STJ不是BCNF。

2.转化为BCNF的方法

将3NF的关系模式分解为BCNF的方法如下。

1)在3NF关系模式中,去掉一些主属性,只保留主键,使它们只有唯一的候选键。

2)把去掉的主属性,分别同各自的非主属性组成新的关系模式。

3)检查分解后的新模式,如果仍不是BCNF,则继续按照前面的方法进行分解,直到达到要求。

根据以上方法,可将关系模式STJ分解为ST(学生,教师)和TJ(教师,课程)两个关系模式。

3.BCNF存在的问题

在数据库设计中,以达到3NF作为主要目标。当然,能够达到BCNF更好,但从理论上说,达到BCNF有时会破坏原来关系模式的一些固有特点。

例如,设有关系模式R(S,T,V),存在的函数依赖有(S,T)→V,V→S。

可以验证,该模型是3NF,但不是BCNF。无论将R如何分解,都将损失函数依赖(S,T)→V。

任务1.5.6 掌握四种范式的关系

纵观四种范式,可以发现它们之间存在着这样的关系:BCNF⊆3NF⊆2NF⊆1NF。从范式所允许的函数依赖方面进行比较,它们之间有如图1-8所示的关系。

图1-8 四种范式的比较

一般情况下,没有异常弊病的数据库设计是好的数据库设计,一个不好的关系模式也总是可以通过分解转换成好的关系模式的集合。但是在分解时要全面衡量,综合考虑,视实际情况而定。对于那些只要求查询而不要求插入、删除等操作的系统,几种异常现象的存在并不影响数据库的操作。这时便不宜过度分解,否则当要进行整体查询时,需要更多的多表连接操作,这样有可能得不偿失。

在实际应用中,最有价值的是3NF和BCNF,在进行关系模式的设计时,通常分解到3NF就足够了。

【课堂练习】

一、填空题

1.数据库系统各类用户对表的各种操作请求(数据定义、查询、更新及各种控制)都是由一个复杂的软件来完成的,这个软件叫作________。

2.DBMS(数据库管理系统)通常提供授权功能来控制不同的用户访问数据库中数据的权限,其目的是为了数据库的________。

3.在概念模型中,通常用实体-联系图表示数据的结构,其三个主要的元素是________、________和________。

4.学校中有若干个系和若干位教师,每位教师只能属于一个系,一个系可以有多位教师,系与教师的联系类型是________。

5.数据库系统中所支持的主要逻辑模型有层次模型、关系数据模型、________和面向对象模型。

6.联系两个表的关键字称为________。

7.关系中主键的取值必须唯一且非空,这条规则是________完整性规则。

8.关系模式是对关系结构的定义,是对关系________的描述。

9.对于1:1的联系,________均是该联系关系的候选键。

10.对于1:n的联系,关系的键是________。

11.对于m:n的联系,关系的键是________。

12.关系完整性约束包括________完整性、参照完整性和用户自定义完整性。

二、选择题

1.数据库管理技术的发展阶段不包括( )。

A.数据库系统管理阶段

B.人工管理阶段

C.文件系统管理阶段

D.操作系统管理阶段

2.数据处理进入数据库系统阶段,以下不是这一阶段的优点的是( )。

A.有很高的数据独立性

B.数据不能共享

C.数据整体结构化

D.有完备的数据控制功能

3.用于定义、撤销和修改数据库对象的语言是( )。

A.DDL

B.DML

C.DC

D.DEL

4.数据库系统的出现使信息系统以( )为中心。

A.数据库

B.用户

C.软件

D.硬件

5.在现实世界中,事物的一般特性在信息世界中称为( )。

A.实体

B.实体键

C.属性

D.关系键

6.实体-联系图(E-R图)是( )。

A.现实世界到信息世界的抽象

B.描述信息世界的数据模型

C.对现实世界的描述

D.描述机器世界的数据模型

7.关系数据模型的数据结构是( )。

A树

B.图

C.表

D.二维表

8.关系R和S进行自然连接时,要求R和S含有一个或多个公共( )。

A.元组

B.行

C.记录

D.属性

9.设属性A是关系R的主属性,则属性A不能取空值,这是( )。

A.实体完整性规则

B.参照完整性规则

C.用户自定义完整性规则

D.域完整性规则

三、简答题

1.简述数据、数据库、数据库管理系统和数据库系统的定义。

2.数据库系统有哪些特点?

3.数据库管理系统的主要功能有哪些?

4.在关系代数中,等值条件连接和自然连接的区别是什么?

5.试述关系数据模型的完整性规则。在参照完整性规则中,为什么外键属性的值也可以为空?什么情况下才可以为空?

6.什么是关系规范化?关系规范化的目的是什么?关系规范化的基本方法是什么?1NF至BCNF,它们之间的关系是什么?

四、设计题

1.试给出三个实际情况的E-R图,要求实体之间具有一对一、一对多、多对多各种不同的联系。

2.某学院有若干系,每个系有若干班级和教研室,每个教研室有若干教师,每个班有若干学生,每个学生选修若干课程,每门课程可由若干学生选修。请使用E-R图绘制该学院的概念模型。

3.某商品销售公司有若干销售部门,每个销售部门有若干员工,销售多种商品,所有商品由一个厂家提供,设计该公司销售系统的E-R模型,并将其转换为关系模式。

4.设关系模式SCT(学号,课程号,成绩,教师名,教师地址)。如果规定:每个学生每学一门课程只有一个成绩;每门课只有一个教师任教;每个教师只有一个地址(无同名教师)。

(1)写出关系模式SCT的基本函数依赖集。

(2)找出关系模式SCT的候选键。

(3)试把SCT分解成2NF模式集,并说明理由。

(4)试把SCT分解成3NF模式集,并说明理由。

【课外实践】

实践任务1 绘制表示班级与学生关系的E-R图

要求:

(1)确定班级实体和学生实体的属性和键。

(2)确定班级和学生之间的联系,给联系命名并指出联系的类型。

(3)确定联系本身的属性。

(4)绘制班级与学生关系的E-R图。

(5)将E-R图转化为表,写出表的关系模式并标明各自的主键或外键。

实践任务2 绘制表示顾客与商品关系的E-R图

要求:

(1)确定顾客实体和商品实体的属性和键。

(2)确定顾客和商品之间的联系,给联系命名并指出联系的类型。

(3)确定联系本身的属性。

(4)绘制顾客与商品关系的E-R图。

(5)将E-R图转化为表,写出表的关系模式并标明各自的主键或外键。

实践任务3 绘制表示学校与校长关系的E-R图

要求:

(1)确定学校实体和校长实体的属性和键。

(2)确定学校和校长之间的联系,给联系命名并指出联系的类型。

(3)确定联系本身的属性。

(4)绘制学校与校长关系的E-R图。

(5)将E-R图转化为表,写出表的关系模式并标明各自的主键或外键。

实践任务4 绘制房地产交易中客户、业务员和合同间关系的E-R图

要求:

(1)确定客户实体、业务员实体和合同实体的属性和键。

(2)确定客户、业务员和合同三者之间的相互联系,给联系命名并指出联系类型。

(3)确定联系本身的属性。

(4)绘制客户、业务员和合同三者关系的E-R图。

(5)将E-R图转化为表,写出表的关系模式并标明各自的主键或外键。

实践任务5 确定表中的关键字

已知部门表和员工表,分别如表1-13和表1-14所示。

表1-13 部门表

表1-14 员工表

要求:

(1)确定部门表和员工表中的候选键(单属性或组合属性),并陈述理由。

(2)在候选键中确定部门表和员工表的主键。

(3)确定部门表和员工表中的共有属性。

(4)指出哪个表中的哪个属性是外键。

(5)确定哪个表是主表,哪个表是从表。

(6)解释部门表和员工表是如何通过关键字实现数据完整性的。

实践任务6 规范化数据

已知项目表1、项目表2、职员表和项目表3,分别如表1-15~表1-18所示。

表1-15 项目表1

表1-16 项目表2

表1-17 职员表

表1-18 项目表3

要求:

(1)判断项目表1是否满足1NF的条件,并说明理由。

(2)判断项目表2是否满足2NF的条件,并说明理由。

(3)判断职员表是否满足3NF的条件,并说明理由。

(4)判断项目表3是否满足BCNF的条件,并说明理由。

(5)将项目表1转换成满足1NF条件的表。

(6)将项目表2转换成满足2NF条件的表。

(7)将职员表转换成满足3NF条件的表。

(8)将项目表3转换成满足BCNF条件的表。

(9)简述规范化数据带来的不利影响。