数据库三范式

1、前言

  数据库关系模式可分为第一范式(1NF),第二范式(2NF),第三范式(3NF)和Boyce-Codd范式(BCNF)。这几个规范要求越来越严格,他们之间的关系为 1NF ⊂ 2NF ⊂ 3NF ⊂ BCNF,即,如果满足第二范式一定满足第一范式,满足第三范式一定满足第二范式,以此类推。

2、第一范式

2.1 定义

  如果一关系模式r(R)的每个属性对应的域值是不可分的,则称r(R)属于第一范式,记为r(R)⊂1NF。

2.2 案例

  如下图所示的关系模式是一个非规范化的关系模式,因为address的值域是可分的。

name sex address
province city street

  将上述关系模式规范化如下图,才是 1NF 关系模式:

name sex province city street

 

3、第二范式

3.1 定义

  首先是 2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。

  第二范式满足两部分内容:一是表必须有一个主键;二是非主键属性必须完全依赖于主键,而不能只依赖于部分主键。

3.2 案例

  如表主键为(OrderId,ProductId),Price(价格)和DisCount(折扣)项完全依赖于主键(OrderId,ProductId),而ProductName(产品名字)、Producter(生产商)仅仅依赖于ProductId,即部分主键,因此不符合第二范式,这样会导致数据冗余。可以拆分成如下两个表

4、第三范式

4.1 定义

  首先是 2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。

4.2 案例

  如图,主键为 OrderId,其余所有属性都完全依赖于这个主键,但是ProductName(产品名字)、Producter(生产商)属性直接依赖于ProductId,ProductId依赖于主键,这就是 通过传递才依赖主键的,不符合3NF。拆分后,满足。

 

5、第二范式和第三范式

 2NF 和 3NF很容易混淆,满足3NF一定满足2NF,总结下就是:

  • 2NF:是否存在部分依赖主键
  • 3NF:是否存在主键依赖传递

posted @ 2017-08-29 20:12  MoonGeek  阅读(293)  评论(0编辑  收藏  举报