数据库范式总结:1NF、2NF、3NF、BCNF

关系型数据库的核心是“规范化”,规范化是指对数据库的数据结构进行合理组织,使得在保持存储数据完整性的同时,最小化冗余数据。一般在实践中,数据库只需要满足第三范式或者BCNF范式即可,本文着重对这四个范式进行介绍,这篇文章摘录自书籍,只做学习交流之用。

1、第一范式(1NF)

在任何一个关系型数据库中,第一范式是对关系模式的基本要求,不满足第一范式的数据库就不是关系型数据库。第一范式要求数据库表的每一列都是不可分的数据基本项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。

2、第二范式(2NF)

第二范式是在第一范式的基础上建立起来的,即满足第二范式必须先满足第一范式。第二范式要求数据库表中的每个实例或行必须可以唯一地区分。为了区分方便,通常需要为表加上一个列,以存储各个实例的唯一标识。第二范式要求实体的属性完全依赖于主关键字,所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。

3、第三范式(3NF)

满足第三范式必须先满足第二范式。第三范式要求一个数据库表中不包含已在其他表中包含的非主关键字信息。通俗的说,就是如果一个表中的字段要在另一个表中存在,那么这个字段一定要是这张表的主关键字字段。注意,在一些特殊情况下,如为了减少多表连接操作、提高查询速度,会主动利用数据冗余来换取效率。这种情况通常出现于报表数据库中、数据仓库这类分析型数据库中。

4、Boyce-Codd范式(BCNF)

在第三范式的基础上,数据库表中如果不存在任何字段对任一候选关键字段的传递函数依赖,则符合Boyce-Codd范式。例如,假设仓库管理关系表为UserWarehouse(仓库ID,存储物品ID,管理员ID,数量),且有一个管理员只在一个仓库工作;一个仓库可以存储多种物品,则这个数据库表中存在如下决定关系:

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

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

所以,(仓库ID,存储物品ID)和(管理员ID,存储物品ID)都是UserWarehouse的候选关键字,表中的唯一非关键字段为数量,它是符合第三范式的。但是,由于存在如下决定关系:

(仓库ID)->(管理员ID)

(管理员ID)->(仓库ID)

即存在关键字段决定关键字段的情况,所以其不符合Boyce-Codd范式。为了符合Boyce-Codd范式,应当把仓库管理关系表分解为两个关系表:仓库管理表UserWarehouse(仓库ID,管理员ID)和仓库表Warehouse(仓库ID,存储物品ID,数量)。

本文标题:数据库范式总结:1NF、2NF、3NF、BCNF

本文链接:http://yedward.net/?id=125

本文版权归作者所有,欢迎转载,转载请以文字链接的形式注明文章出处。

相关文章