规范化
本节首先讨论一个关系属性间不同的依赖情况,讨论如何根据属性间依赖情况来判定关系是否具有某些不合适的性质,通常按属性间依赖情况来区分关系规范化程度为第一范式、第二范式、第三范式和第四范式等;然后直观地描述如何将具有不合适性质的关系转换为更合适的形式。上节关系模式Student<U,F>中有Sno→Sdept成立,也就是说在任何时刻Student的关系实例(即Student数据表)中,不可能存在两个元组在Sno上的值相等,而在Sdept上的值不等。因此,下表的Student表是错误的。因为表中有两个元组在Sno上都等于S1,而
Sdept上一个为计算机系,一个为自动化系。

函数依赖
定义1 设R(U)是属性集U上的关系模式,X,Y是U的子集。若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称X函数确定Y或Y函数依赖于X,记作X→Y。
函数依赖和别的数据依赖一样是语义范畴的概念,只能根据语义来确定一个函数依赖。例如,姓名→年龄这个函数依赖只有在该部门没有同名人的条件下成立。如果允许有同名人,则年龄就不再函数依赖于姓名了。
设计者也可以对现实世界作强制性规定,例如规定不允许同名人出现,因而使姓名→年龄函数依赖成立。这样当插入某个元组时这个元组上的属性值必须满足规定的函数依赖,若发现有同名人存在,则拒绝插入该元组。
注意,函数依赖不是指关系模式R的某个或某些关系满足的约束条件,而是指R的一切关系均要满足的约束条件。
下面介绍一些术语和记号。
①X→Y,但Y⊄X,则称X→Y是非平凡的函数依赖。
②X→Y,但Y⊆X,则称X→Y是平凡的函数依赖。对于任一关系模式,平凡函数依赖都是必然成立的,它不反映新的语义。若不特别声明,总是讨论非平凡的函数依赖。
③若X→Y,则X称为这个函数依赖的决定属性组,也称为决定因素(determinant)。
④若X→Y,Y→X,则记作X←→Y。
⑤若Y不函数依赖于X,则记作X+>Y。

码
码是关系模式中的一个重要概念。在第2章中已给出了有关码的若干定义,这里用函数依赖的概念来定义码。
定义4 设K为R<U,F>中的属性或属性组合,若K完全依赖于U,则K为R的候选码(candidate key)。
注意U是完全函数依赖于K,而不是部分函数依赖于K。如果U部分函数依赖于K,则K称为超码(Surpkey)。候选码是最小的超码,即K的任意一个真子集都不是候选码。
若候选码多于一个,则选定其中的一个为主码(primary key)。
包含在任何一个候选码中的属性称为主属性(prime attribute);不包含在任何候选码中的属性称为非主属性(nonprime attribute)或非码属性(non-key attribute)。最简单的情况,单个属性是码:最极端的情况,整个属性组是码,称为全码(all-key)。
在后面的章节中主码或候选码都简称为码。读者可以根据上下文加以识别。
【例1】关系模式S(Sno, Sdept, Sage)中单个属性Sno是码,用下划线显示出来。SC(Sno, Cno, Grade)中属性组合(Sno, Cno)是码。
【例2】关系模式R(P, W, A)中,属性P表示演奏者,W表示作品,A表示听众。假设一个演奏者可以演奏多个作品,某一作品可被多个演奏者演奏,听众也可以欣赏不同演奏者的不同作品,这个关系模式的码为(P, W, A),即all-key。
定义5 关系模式R中属性或属性组X并非R的码,但X是另一个关系模式的码,则称X是R的外部码(foreign key),也称外码。
如在SC(Sno, Cno, Grade)中,Sno不是码,但Sno是关系模式S(Sno, Sdept, Sage)的码,则Sno是关系模式SC的外码。
主码与外码提供了一个表示关系间联系的手段,如例1中关系模式S与SC的联系就是通过Sno来体现的。
范式
关系数据库中的关系是要满足一定要求的,满足不同程度要求的为不同范式。满足最低要求的叫第一范式,简称1NF;在第一范式中满足进一步要求的为第二范式,其余以此类推。
有关范式理论的研究主要是E.F.Codd做的工作。1971-1972年Codd系统地提出了1NF、2NF、3NF的概念,讨论了规范化的问题。1974年,Codd和Boyce共同提出了一个新范式,即BCNF。1976年Fagin提出了4NF。后来又有研究人员提出了5NF。
所谓“第几范式”原本是表示关系的某一种级别,所以常称某一关系模式R为第几范式。现在则把范式这个概念理解成符合某一种级别的关系模式的集合,即R为第几范式就可以写成R∈xNF。
对于各种范式之间的关系有
5NF⊂4NF⊂BCNF⊂3NF⊂2NF⊂1NF
成立,如下图所示。

一个低一级范式的关系模式通过模式分解(schema decomposition)可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化(normalization)。







