7.6.2 规范化

2025-06-07 19:46:43 更新

关系数据库设计的方法之一就是设计满足适当范式的模式,通常町以通过判断分解后的模

式达到几范式来评价模式规范化的程度。范式有:INF、2NF、3NF、BCNF、4NF和5NF,其

中1NF级别最低。这几种范式之间1NF二J 2NF二J 3NF二)BCNF二)4NF二)5NF成立。

通过分解,可以将一个低一级范式的关系模式转换成若干个高一级范式的关系模式,这种

过程叫作规范化。下面将给出各个范式的定义。

1. 1NF (第一范式)

【定义7.10]若关系模式R的每一个分量是不可再分的数据项,则关系模式R属于第一

范式,记为R61NF。

(1)冗余度大。例如每个供应者的Sno、

Sname、Status. City要与其供应的零件的种类一

样多,(2)引起修改操作的不一致性。例如供应者S1从“天津”搬到“上海”,若不注意,会

使一些数据被修改,另一些数据未被修改,导致数据修改的不一致性。

(3)插入异常。关系模式FRIST的主码为Sn。、Pno,按照关系模式实体完整性规定主码

不能取空值或部分取空值。这样,当某个供应者的某些信息未提供时(如Pno),则不能进行

插入操作,这就是所谓的插入异常。

(4)删除异常,若供应商S4的P2零件销售完了,并且以后不再销售P2零件,那么应删

除该元组。这样,在基本关系FIRST找不到S4,可S4又是客观存在的。

正因为上述4个原因,所以要对模式进行分解,并引入了 2NF。

2. 2NF (第二范式)

【定义7.11]若关系模式RG 1NF,且每一个非主属性完全依赖于码,则关系模式RG2NF„

换句话说,当1NF消除了非主属性对码的部分函数依赖,则称为2NF。

例如,FIRST关系中的码是Sno、Pno,而Sno—Status,因此非主属性Status部分函数依

赖于码,故非2NF的。

若此时,将FIRST关系分解为:

FIRST i(Sno,Sname,Status,City) G 2NF

FIRST2(Sno?Pno,Qty) € 2NF

因为分解后的关系模式FIRSTi的码为Sno,非主属性Sname. Status、City完全依赖于码

Sno,所以属于2NF:关系模式FIRST2的码为Sno、Pno,非主属性Qty完全依赖于码,所以也

属于2NF。

3.3NF (第三范式)

【定义7.12】若关系模式R(U,F)中不存在这样的码X,属性组Y及非主属性Z(ZSY)使得

X—Y, (Y*X)Y—Z成立,则关系模式R6 3NF。

即当2NF消除了非主属性对码的传递函数依赖,则称为3NF.

例如,FIRSTi任3NF,因为在分解后的关系模式FIRSTi中有Sno一Status,Status—City,存

在着非主属性City传递依赖于码Sno。若此时将FIRSTi继续分解为:

FIRSTn(Sno,Sname,Status) G 3NF

FIRSTi2(Status,City) G 3NF

通过上述分解,数据库模式 FIRST 转换为 FIRSTn(Sno,Sname,Status)、FIRSTi2(Status,City)、

FIRST2(Sno,Pno,Qty)二个子模式。由于这三个子模式都达到了 3NF,因此称分解后的数据库模

式达到了 3NF.

可以证明,3NF的模式必是2NF的模式。产生冗余和异常的两个重要原因是部分依赖和传

递依赖。因为3NF模式中不存在非主属性对码的部分函数依赖和传递函数依赖,所以具有较好

的性能。对于非3NF的INF、2NF其性能弱,一般不宜作为数据库模式,通常要将它们变换成4.BCNF (Boyce Codd Normal Form,巴克斯范式)

【定义7.13]关系模式RG1NF,若X-Y且Y笑X时,X必含有码,则关系模式R£ BCNF。

也就是说,当3NF消除了主属性对码的部分函数依赖和传递函数依赖,则称为BCNF。

结论:一个满足BCNF的关系模式,应有如下性质。

(1)所有非主属性对每一个码都是完全函数依赖。

(2)所有非主属性对每一个不包含它的码,也是完全函数依赖.

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

例如,设R(Pno,Pname,Mname)的属性分别表示零件号、零件名和厂商名,如果约定,每

种零件号只有一个零件名,但不同的零件号可以有相同的零件名;每种零件可以有多个厂商生

产,但每家厂商生产的零件应有不同的零件名。这样我们可以得到如下一组函数依赖:

Pno—>Pname, (Pname ,Mnanie)TPno

由于该关系模式R中的候选码为(Pname,Mname)或(Pno,Mname),因而关系模式R的

属性都是主属性,不存在非主属性对码的传递依赖,所以R是3NF的。但是,主属性Pname

传递依赖于码(Pnaine,Mname),因此R不是BCNF的。当一种零件由多个生产厂家生产时,

零件名与零件号间的联系将多次重复,带来冗余和操作异常现象。若将R分解成:

R1 (Pno,Pname)和 R2(Pno,Miiame)

就可以解决上述问题,并且分解后的关系模式Rl、R2都属于BCNF。

5. 4NF (第四范式)

【定义7.14】关系模式RG1NF,若对于R的每个非平凡多值依赖X一一丫且Y%X时,

X必含有码,则关系模式R(U,F)£4NFo

4NF是限制关系模式的属性间不允许有非平凡且非函数依赖的多值依赖。

注意:如果只考虑函数依赖,关系模式最高的规范化程度是BCNF;如果考虑多值依赖,

关系模式最高的规范化程度是4NF。

6.连接依赖5NF

连接依赖:当关系模式无损分解为"个投影(»>2)会产生一些特殊的情况。下面考虑供应

商数据库中SPJ关系的一个具体的值,如图7-24所示。

第一次SP、PJ投影连接“ SPx PJ "起来的结果比原始SPJ关系多了一个元组“S2, P1,J2”,即图7-24中带下画线的元组。第二次连接的结果去掉了多余的元组,从而恢复了原始的关系SPJ。在这种情况下,原始的SPJ关系是可3分解的。注意,无论我们选择哪两个投影作为第一次连接,结果都是一样的,尽管在每种情况下中间结果不同。

SPJ的可3分解性是基本与时间无关的特性,是关系模式的所有合法值满足的特性,也就是说,这是关系模式满足一个特定的与时间无关的完整性约束。将这种约束简称为3D (3分解)

约束。上述情况就是连接依赖要研究的问题。

为3NF或更高级别的范式,这种变换过程称为"关系模式的规范化处理"。