
3.1.5 关系模式规范化小结
关系模式规范化的过程是逐步消除关系模式中不合适的数据依赖的过程,使关系模型中的各个关系模式达到某种程度的分离,各个范式所满足的条件一个比一个严格。按照它们的定义,可用图3.1概括关系模式规范化的过程。

图3.1 关系模式规范化的过程
以简单的关系模式为例,根据上述过程将其逐级规范化。
设有“教师任课”关系如下:
分析上述关系模式可知,该关系模式为非规范化的关系模式,所以,要对其进行规范化,具体步骤如下。
(1)消去重复组。
以教师讲授一门课作为一条记录,合并所有的有关属性,得到如下的关系模式:
其中,{教师工号,课程号{为关键字,此关系为1NF。
(2)消去部分函数依赖。
在“教师任课”关系模式中,一些非主属性对关键字{教师工号,课程号{部分函数依赖,如“姓名”“性别”“职称”部分函数依赖于关键字{教师工号,课程号{,因为它们实际上是由教师工号决定的。因此,需要对关系进行分解,使非主属性完全函数依赖于关键字,从而得到如下三个关系模式:
以上三个关系模式都是2NF。
但是,在“教师”关系模式中,{教师工号{→{系号{,{系号{→{系名称{,所以,非主属性“系名称”传递函数依赖于关键字{教师工号{,因此“教师”关系模式不是3NF。
(3)消去传递函数依赖。
为消除传递函数依赖,将“教师”关系模式进一步分解成如下两个关系模式:
关键字为{教师工号{。
关键字为{系号{。
所以,可以用下面的四个关系模式代替最初的“教师任课”关系模式:
关键字为{教师工号{。
关键字为{系号{。
关键字为{教师工号,课程号{。
关键字为{课程号{。
在这四个关系模式组成的关系模型中消除了传递函数依赖,达到了3NF。在以上任意一个关系模式中,每个决定因素都是关键字,因此也同时满足了BCNF的要求。
一个关系模式达到BCNF,说明在函数依赖的范畴内已经实现了彻底分离,可以消除插入、删除和更新的异常。
对关系模式的规范化可以小结如下。
(1)目的
规范化的目的是使关系模式结构合理,清除存储异常,并使数据冗余尽量小,便于数据的插入、删除和更新。
(2)原则
遵从“一事一地”的模式设计原则,即一个关系模式描述一个概念、一个实体或实体间的一种联系。规范化的实质是概念单一化。
(3)方法
将关系模式投影分解成两个或两个以上的关系模式。
(4)要求
分解后的关系模式集合应当与原关系模式等价,即经过自然连接可恢复原关系而不丢失信息,并保持属性间合理的联系。