
3.1.3 关系模式的规范化
关系数据库中的关系是要满足一定规范化要求的,对于不同的规范化要求程度,可以用“范式”来衡量,记作NF(Normal Formulation)。范式是表示关系模型的级别,是衡量关系模型规范程度的标准,达到范式的关系才是规范化的。满足最低要求的关系为第一范式,简称为1NF;在第一范式的基础上,进一步满足一些要求的关系为第二范式,简称为2NF,依次类推。
定义:如果关系R的每一个属性的值为不可分离的原子值,即每个属性都是不可再分的基本数据项,则R是第一范式,记作R∈1NF。
这是关系模式必须达到的最低要求,不满足该条件的关系模式称为非规范化关系,即非第一范式。目前,大部分商用的关系数据库管理系统处理的关系要求至少是1NF的。下面的两个关系中,“部门”关系是1NF的,而“职工”关系是非1NF的。
部门:

职工:

将“职工”关系转换为1NF:

即将属性“工资”分解成3个不可再分的属性——基本工资、补贴、奖金。
定义:如果关系R∈1NF,且R中每一非主属性完全函数依赖于主关键字,则R是第二范式,即R∈2NF。
设有一个“职工情况表”关系如下:
该关系的关键字为{职工工号,起始至终止年月{。而在非主属性中,只有属性“工作单位”和“证明人”是完全函数依赖于主关键字,职工姓名、性别、出生年月对主关键字都是部分函数依赖,因为只要有了“职工工号”就可以确定它们的值。所以,“职工情况表”关系模式不是2NF。
通过简单的投影分解可以使非2NF的关系转化为2NF的关系,其方法为:将部分函数依赖关系中的主属性(决定方)和非主属性从关系模式中提出,单独构成一个关系模式;将关系模式中的余下的属性,加上主关键字,构成另一个关系模式。如“职工情况表”关系模式可分解成以下两个2NF的关系模式:
下划线标出的属性构成主关键字。
这里所说的投影分解,是指所得关系是原关系的投影。
而在分解后的关系模式中,仍存在着分解前的函数依赖关系:
定义:如果R∈2NF,且它的任何一个非主属性都不传递依赖于任何主关键字,则R是第三范式,记作R∈3NF。
将非3NF的关系转化为3NF的关系可以采用以下方法。
(1)将起传递作用的函数依赖关系中的主属性(决定方)和非主属性提出单独构成一个关系模式,再将它的决定方和关系模式中余下的属性,加上主关键字,构成另一个关系模式。
(2)去掉关系模式中的多余项。
设有一个“配件库存”关系如下:
其中同一种配件可以由不同的供应商提供,不同的供应商提供的同一种配件的价格是不一样的,库存数量也是不一样的,所以,该关系模式中存在的函数依赖是{配件编号,供应商名称{→{价格{,{配件编号,供应商名称{→{库存数量{,{价格,库存数量{→{库存占用资金{,该关系是2NF,但非主属性“库存占用资金”传递函数依赖于主关键字{配件编号,供应商名称{,因为“库存占用资金”等于“价格”乘以“库存数量”,而“价格”和“库存数量”是函数依赖于主关键字的,所以“库存占用资金”传递函数依赖于主关键字,该关系模式不是3NF。可将关系模式中非主属性“库存占用资金”去掉,使其成为以下的3NF:
第三范式的关系模式消除了非主属性对关键字的传递函数依赖和部分函数依赖,但并不很彻底,因为在存在多个关键字或关键字为属性组时,仍有可能存在主属性对关键字的部分函数依赖和传递函数依赖,由此也会造成数据的冗余,从而给操作带来问题。
为了解决第三范式的不彻底性,Boyce和Codd于1974年共同提出了改进的第三范式,即Boyce/Codd范式,简记为BCNF。Boyce/Codd范式通过消除决定因素不含关键字的函数依赖,从而消去主属性之间的部分函数依赖和传递函数依赖。
定义:如果关系R∈3NF, X,YU,若X→Y,且Y
X时,X必含有码,则R是BCNF,即R∈BCNF。
从BCNF的定义可以看出,一个满足BCNF的关系模式一定是:
(1)非主属性对关键字完全函数依赖;
(2)主属性对不包含它的关键字完全函数依赖;
(3)没有属性完全函数依赖于一组非主属性。
第三范式和BCNF有一定的关系。一个关系模式属于BCNF,则一定属于3NF, BCNF是3NF的特例。但反之则不然,属于3NF的关系不一定是BCNF,3NF是对BCNF放宽一个限制,即允许决定因素中不包含码。
第四范式是BCNF的推广,它适用于多值依赖的关系模式。
定义:如果关系模式R∈BCNF,若X→→Y(YX)是非平凡的多值依赖,且X含有码,则称R是第四范式,即R∈4NF。
一个关系范式如果属于4NF,则一定属于BCNF,但一个BCNF的关系模式不一定是4NF。使关系模式达到4NF的方法是消除非平凡、非函数依赖的多值依赖。
如果关系模式R(X, Y,Z)满足多值依赖X→→Y, Y→→Z,那么可以将其投影分解为R1(X, Y)和R2(Y, Z)两个关系模式。
到目前为止,规范理论已经提出五级范式,但在实际应用中最有价值的是3NF或BCNF。所以,一般分解到3NF就可以了。