对于范式的理解

我们判断数据库设计的好坏很大程度上是根据范式的,简单总结一下我对范式的一点理解:

第一范式(1NF)

是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。

第二范式(2NF

就是非主属性完全依赖于主关键字。

第三范式(3NF

在第二范式的基础上,数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖则符合第三范式。简而言之,第三范式就是属性不依赖于其它非主属性。

BC范式(BCNF)

也就是排除了属性之间不存在传递函数依赖(不润主属性与非主属性)

这几个范式一步一步地约束了数据可的设计:

  从第一范式到第二范式消去了主属性对键的部分依赖;

  从第二范式到第三范式消去非主属性对键的传递函数依赖;

  从第三范式到BC范式消去了属性对键的传递函数依赖

 

函数依赖的定义:

一、      假设给定属性X的值就知道属性Y的值,那么成X函数决定Y(或Y函数依赖于X),记作X->Y

就像是函数,x确定,f(x)也确定了

对于函数依赖x-》y,如果存在X‘属于X时有X’-》Y成立,那么称Y对X部分函数依赖,否则称,Y对X完全函数依赖。

传递函数依赖:x-》y,y->Z,则X->Z为传递函数依赖

 

第二范式:对于关系R,若R属于第一范式,且每个非主属性(不是候选码中的属性)完全函数依赖于候选键,则符合第二范式。

       实质是元组要有唯一的标识码,保证了元祖的唯一性,一个元组只能对应一个实体,从根本上解决了“插入、删除、更改异常”

第三范式:对于属于第二范式的关系,如果每个非主属性都不传递依赖于候选码,则符合第三范式。

        非主属性不传递依赖于候选码,主属性可以传递依赖于候选码。3NF尽量消除了冗余

BC范式:如果R属于第一范式,且每个属性都不传递依赖于R的候选键,则R属于BC范式,是基于函数依赖的最高范式

你可能感兴趣的:(范式)