数据库规范化与经典三范式

数据库规范化与经典三范式

  冗余致使多种更新异常,也就是插入、更新和删除行的操做困难。数据库

  规范化(normalization)是经过修改表以减小冗余和矛盾的一系列步骤。less

  在每一步以后,数据库都达到一个特定的范式(normal form) 。函数

 

  关系模型定义了三种范式,以著名的序数命名。spa

  第一范式(1NF)orm

  第二范式(2NF)ssl

  第三范式(3NF)it

  每一种范式都比前一种更健壮。符合3NF的数据库也符合2NF和1NF。规范化水平越高,表的数量也越多。io

 

  无损分解(lossless decomposition)能确保表的分割不会引发信息丢失。form

  依赖-保持分解(dependency-preserving decomposition)能确保联系不丢失。class

  当表被分割的时候,存在匹配的主键和外键列不该被认为是多余的数据。

  规范化不是系统化,它是一个涉及重复表的分割、从新联结和精炼的迭代过程。

 

第一范式(1NF)

  知足第一范式的表:

  列仅包含原子值。

  没有重复的组。

  原子值(也称为标量值)是不能再细分的单一值。

  重复的组是两个或多个逻辑相关联的列的集合。

 

第二范式(2NF)

  当知足下列条件时,第一范式的表自动知足第二范式:

  主键是一个列(也就是说,关键字不是组合的)。

  表中全部的列是主键的一部分(单一的或组合的)。

  知足第二范式的表:

  知足第一范式。

  非部分函数依赖。

  若是表中的一些组合键(但不是所有)值肯定了一个非键列的值,则表包含部分函数依赖

  第二范式表是彻底函数依赖,意味着若是组合键中任何一列值改变,将致使非键列的值须要被更新。

 

第三范式(3NF)

  知足第三范式的表:

  知足第二范式。

  没有传递依赖。

  若是一个非键列的值肯定了另外一个另外一个非键列的值,则表包含传递依赖

  在第三范式的表中,非键列相互独立而且只依赖于主键列。

相关文章
相关标签/搜索