关系模型规范化

 

关系模型规范化目的是为了消除存储异常,减少数据冗佘,保证数据的完整性(数据的正确性和一致性)和存储效率,一般规范为第三范式即可。
关系数据库中的关系是要满足一定的规范化要求的,对于不同规范化程度,可以使用“范式”来衡量,记作NF。满足最低要求的为I范式,简称1NF。在1NF范式的基础上,进一步满足一些要求的为II范式,简称2NF。

图片
图片
图片
图片
图片
 

一、1NF
一个关系的每一个属性都是不可分解再分的基本数据项,则该关系是1范式,表1-1、表1-3和表1-4都满足了这个条件,所以它们是1范式。表1-2就不是,因为电话属性还可以再分。

二、函数依赖与函数传递依赖
要理解2NF和3NF,首先给出函数依赖与函数传递依赖的概念。
1、函数依赖
在表1-1中,编号是主关键字,它能惟一的标识出图书表的每一行。例如:编号“YBZT0001”的图书名为“红楼梦图咏(3册)”,图书名完全由编号决定,不同的编号都会有一个图书名称与它对应,这时图书名称完全函数依赖于图书编号。从表1-1中可以看出,定价、出版社等属性也完全函数依赖于图书编号。
表1-4的主关键字为(编号、出版社编号),当知道编号、出版社编号时,就能唯一地确定出图书出版日期,出版日期既领带于编号,又依赖于出版社编号,它完全依赖主关键字(编号、出版社编号)。如果知道编号,就可以确定书名。所双书名属性只依赖于编号,与出版社编号无关,它只依赖于主关键字的一部份,则称编号属性部分函数依赖于主关键字。
2、函数传递依赖
在表1-4中,编号——书名,出版社编号-出版社,出版社名称是通过出版社编号的传递来依赖图书编号的,则称图书编号和出版社名称之间存在函数传递依赖关系。
三、2NF
2NF首先是1NF,关系中的每一个非主属性完全函数依赖于主关键字,则该关系是2NF。

单个属性作为关键字的情况比较简单,因为主关键字的作用就是能唯一标识表中的每一行,关系中的非主属性都能完全依赖于主关键字,这样的关系是2NF。如表1-1,它就是2NF。

对于组合属性作为主关键字的那些关系,通常要判断每一个非主属性是完全依赖还是部分依赖主关键字。如表1-4的主关键字(编号、出版社编号),在该表中出版社的日期属性完全依赖于主关键字,书名只依赖主关键字的编号,它与出版社无关,所以表1-4不是2NF。

将非2NF规范为2NF的方法是:将部分函数依赖关系中的主属性(决定方)和非主属性从关系中提取出来,单独构成一个关系模式,将关系模式中的佘下的属性,加上主关键字,构成另一个关系。如表1-4中的书名属性只与主关键字中的编号有关,其它属性完全依赖于主关键字,这时只要将书名属性分离出来,由于书名已在表1-1中存在。因此将表修改为表1-5就符合2NF了。

四、3NF
首先是2NF,且关系中的任何一个非主属性都不传递依赖于任何主关键字,则关系是3NF。
首先需要找出关系中的所有主关键字,然后确定任何一个非主属性和任何主关键字之间是否存在函数传递依赖关系,如果有则删除函数传递依赖关系。

原文见我的QQ空间:http://user.qzone.qq.com/284648964?ptlang=2052

由于原文是写在我的QQ空间,文章转过来的过程中造图片丢失,对大家造成的影响深表歉意!