(一)规范化的关系
当一个关系中的所有分量都是不可分的数据项时,该关系是规范化的。从之前讲的关系模式的特点来看,关系模式所涉及的关系都是规范化的。例如,具有组合数据项和具有多值数据项的都不是规范化的表。实际上,“规范化”过程到此远没有结束。“进一步规范化”过程(简称“规范化”过程)是建立在“范式”这一概念上的。
根据每个关系给定的一个函数依赖集,可以求出该关系的候选码。根据这些信息连同对范式的定义条件,就可以展开相应的规范化过程。
所谓规范化过程,是指通过对关系模式进行一系列的检验,以“验证”该关系模式是否满足某个特定的范式,即一个关系若满足某一特定范式所规定的一系列约束条件,它就属于该范式。这个过程以一种自顶向下的方式展开,按照各范式所规定的条件根据需要分解关系达到该范式要求的过程。
因此,规范化过程也可以看作基于关系模式的函数依赖和候选码,对给定关系模式进行分析和分解,以达到相应范式要求。
最初,考特(Codd)提出了三种范式,分别是第一范式(First Normal Form,1 N F)、第二范式(2 N F)、第三范式(3 N F)。后来,博伊斯(B o y c e)和考特(Codd)共同更新了3NF的定义,称为 Boyce-Codd范式(BCNF)。所有这些范式都是基于关系中各属性之间的函数依赖展开讨论的。规范化程度还可有更高的范式:第四范式(4NF)和第五范式(5NF)。
(二)第一范式(1NF)
如果关系模式R中不包含多值属性,则R满足第一范式,记作R∈1NF。
1NF是对关系的最低要求,不满足1NF的关系是非规范化关系。
非规范化关系转化为1NF的方法很简单,当然也不是唯一的。
(三)第二范式(2NF)
有些表虽然已符合1NF的要求,但表中存在大量的数据冗余和潜在的数据更新异常,原因是该关系的码是(职工号,学历),姓名、职称、系名、系办公地址与学历无关,即它们只与码的一部分有关。
1.定义
设X、Y是关系R的两个不同的属性或属性组,且X→Y。如果存在X的某一个真子集X1,使X1→Y成立,则称Y部分函数依赖于X,记作X→pY;反之,称Y完全函数依赖于X,记作X→fY。
如果一个关系R属于1NF,且它所有非主属性都完全函数依赖于R的任一候选码,则R属于第二范式,记作R∈2NF。
2.举例
关系模式:职工信息(职工号,姓名,职称,项目号,项目名称,项目排名)存储了职工的信息和职工所参加的项目信息,即(职工号,项目号)。函数依赖有:
(1)因为职工号→姓名,所以(职工号,项目号)姓名;
(2)同样,(职工号,项目号)职称,(职工号,项目号)项目名称;
(3)(职工号,项目号)项目排名。
因此,非主属性姓名、职称、项目名称并不完全函数依赖于码,它不符合2NF的定义和2NF定义的关系模式,会产生以下几个问题:
(1)插入异常。假如要插入一名职工,但该职工还未参加任何项目,即项目号为空。根据实体完整性约束规则,关系中元组的主码属不能为空,项目号是主属性,因此,该职工信息无法插入。
(2)删除异常。假设有一名职工只参加了一个项目,现在又从这个项目中退出来了,该职工的此项目记录将被删除。由于项目号是属性,所以该记录只能被全部删除,该职工的其他信息也会随着被删除。这样就删除了不该删除的信息,即出现了删除异常。(www.xing528.com)
(3)修改异常。当某个项目的项目名称发生变化时,必须修改多个元组,造成了修改的复杂化,一旦有遗漏,将破坏数据库中数据的一致性。
可把上述关系模式分解如下,使其符合2NF:
职工项目(职工号,姓名,职称,项目号)。
排名(职工号,项目号,项目排名)。
项目(项目号,项目名称)。
(四)第三范式(3NF)
符合第二范式的关系模式仍可能存在数据冗余、更新异常等问题,是一个传递依赖的过程。
在关系R中,如果X、Y、Z是R三个不同的属性或属性组,如果X→Y,Y→Z,但Y↛X且Y不是X的子集,则称Z传递依赖于X。
表的关系模式之所以存在着数据冗余、插入或删除异常,就是因为其中存在着传递函数依赖:姓名→级别,级别→工资。
如果关系模式R属于2NF,且它每一个非主属性都不传递依赖于任何候选码,则称R是第三范式,记作R∈3NF。
如果关系模式R∈1NF,且它的每个非主属性既不部分依赖,也不传递依赖于任何候选码,则记作R∈3NF。不存在非主属性的关系模式一定为3NF。
(五)改进的3NF——BCNF
第三范式的修正形式是 Boyce-Codd范式(Boyce- Codd Normal Form,BCNF),是由博伊斯(Boyce)和考特(Codd)提出的。
设关系模式R(U,F)∈1NF,若F任一函数依赖X→Y(Y⊄X)中X都包含了R的一个码,则称R∈BCNF。
换言之,在关系模式R中,如果每一个决定因素都包含码,则R∈BCNF。
由BCNF的定义可以得到推论,如果R∈BCNF,则
1.R中所有非主属性对每一个码都是完全函数依赖;
2.R中所有主属性对每一个不包含它的码,都是完全函数依赖;
3.R中没有任何属性完全函数依赖于非码的任何一组属性。
定理:如果R∈BCNF,则R∈3NF一定成立。
证明:采用反证法。如果R∈BCNF,但是∉3NF,则R中一定存在传递函数依赖,即R中必定存在候选码X,非主属性A,属性组Y,其中AX,AY,Y→X,使得X—Y—A成立。Y不是R的码,但Y是R的决定因素,根据BCNF的定义,R不是BCNF,与假设相矛盾。所以,假设不成立。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。