数据库知识要点

Published: 26 Sep 2014 Category: 技术

范式

第一范式(1NF)

数据库中的每个属性都包含一个原子性数据,不可再分割,不可包含多个值。

例如,下面几个就包含了 非原子性 数据。

下面这个例子,id 为 3 时,number 中包含了两个数据

| id | number | |----|--------| | 1 | 210 | | 3 | 320 860 |

又例如, 下面的表中,地址包含了街道号和街道名

|name|address| |----|-------| |tom| 59 N. Ajax Rapids |

第二范式(2NF)

第二范式首先要满足第一范式,其次要求没有部分函数依赖。部分函数依赖是指,非主键的列依赖于组合主键的某个部分,但不是完全 依赖于组合主键。

例如

| id | course | name | score | |----|--------|------|-------| | 1 | math | kay | 100 |

假如上面这个表中,(id, course) 为组合主键,那么这个表不满足第二范式,因为 name 仅仅依赖于组合主键中的 id.

第三范式(3NF)

第三范式首先要满足第二范式,其次要求没有传递函数依赖。传递依赖是指任何非键列与另一个非键列有关联。

例如

| name | enemyid | enemyname | |------|----------|------------| | tom | 1 | jack |

name 是主键,但是非主键的 enemyid 的改变会造成 enemyname 的改变,因此,表中存在传递函数依赖。不满足第三范式。