第一范式:

每一个属性下的信息都不可拆分。

比如一个表下的联系方式可拆分为邮箱和电话.

 

第二范式:

非主属性必须完全依赖于主属性(这里的主属性可以是两条属性的组合)

关于范式的一些理解。

由上图可以看出货物名称这个非主属性完全依赖于货物类型和货物ID这两个候选主键的集合。

去掉了注意事项,消除了其对货物类型的部份依赖。

 

第三范式:

以常见的学生表为例:

S1(SNO,SNAME,DNO,DNAME,LOCATION) 各属性分别代表学号,姓名,所在系,系名称,系地址。

该表的主属性为SNO且为单一关键字,满足第二范式但是不满足第三范式,因为DNAME、LOCATION依赖于DNO,属于传递依赖。

可将该表拆分为S1(SNO、SNAME、DNO)和D1(DNO、DNAME、LOCATION).   

两个表通过DNO来实现连接。

第三范式主要消除了非主属性的传递依赖。

 

BC范式:

以网上常见的仓库表为例:

StorehouseManage(仓库ID, 存储物品ID, 管理员ID, 数量)

且有一个管理员只在一个仓库工作;一个仓库可以存储多种物品。(限定条件)

 那么   

(仓库ID、存储物品) →(管理员ID、数量)

(管理员ID、存储物品) →(仓库ID、数量)

  除数量之外都是关键字候选字段,数量为唯一非候选字段所以不存在传递依赖,满足第三范式。

但是,仓库ID和管理员ID相互依赖,所以需要拆分,拆分后的表就满足BC范式。

 

小结:

第一范式      使表中的每个属性都不可拆分

第二范式      消除表中非主属性的部份依赖

第三范式     消除表中非主属性的传递依赖

BC范式        消除表中主属性的传递依赖  (若只有单个主属性/关键字则不存在该情况)

相关文章: