数据库三大范式
第一范式
定义:如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF(即R符合第一范式)
要点:强调列的原子性,即列不能够再分成其他几列
- 1.每个字段取值单一,不允许重复
- 2.每个字段不可以再分
以下不满足1NF
学号 | 姓名 | 联系电话 |
---|---|---|
1 | john | 家庭电话:131000000,办公电话:151000000 |
1 | mary | 家庭电话:132000000,办公电话:152000000 |
点评:
- 1.字段[学号]有重复;
- 2.字段[联系电话]可以再分;
以下满足1NF
学号 | 姓名 | 家庭电话 | 办公电话 |
---|---|---|---|
1 | john | 131000000 | 151000000 |
2 | mary | 132000000 | 152000000 |
第二范式
定义:如果关系模式R∈1NF(即R符合第一范式),并且每一个非主属性都完全依赖于R的码,则R∈2NF
要点:满足第一范式的前提下,消除非主属性对码的部分函数依赖。
以下不满足2NF
学号 | 系名 | 宿舍楼 | 课程 | 分数 |
---|---|---|---|---|
1 | 计算机 | 竹园1号楼 | C语言 | 90 |
点评:
- 这个表完全满足于第一范式:这个表的码(主键)为(学号,课程),这样可以定位到指定行。即:知道这两项可以确定系名、宿舍楼、分数,或者说这三项依赖于前两项。
- 但是:由于非主属性[系名]、[宿舍楼]不完全依赖与码,不符合第二范式,可改为:
以下满足2NF
学号 | 课程 | 分数 |
---|---|---|
1 | C语言 | 90 |
学号 | 系名 | 宿舍楼 |
---|---|---|
1 | 计算机 | 竹园1号楼 |
第三范式
定义:如果关系模式R∈3NF(即R符合第三范式),则每一个非主属性既不部分依赖于码也不传递依赖于码。
要点:不存在非主属性对码的传递性依赖以及部分性依赖。即:在满足第二范式的前提下,消除一般属性对主键的传递依赖。
以下不满足3NF
学号 | 系名 | 宿舍楼 |
---|---|---|
1 | 计算机 | 竹园1号楼 |
点评:
- 这个完全满足了第二范式,但不符合第三范式。
- 因为知道了系名,同样也就知道了宿舍楼,称宿舍楼传递依赖于码(学号),可分解为:
以下满足3NF
学号 | 系名 |
---|---|
1 | 计算机 |
学号 | 宿舍楼 |
---|---|
1 | 竹园1号楼 |
总结
第二范式(2NF)和第三范式(3NF)的概念很容易混淆,区分它们的关键点在于:
- 2NF:非主键列是否完全依赖于主键,还是依赖于主键的一部分;
- 3NF:非主键列是直接依赖于主键,还是直接依赖于非主键列。
一般满足前三个范式就可以避免数据冗余。