数据库三大范式是什么?
- 第一范式(1NF):确保每列的原子性(强调的是列的原子性,即列不能够再分成其他几列)。实际上,第一范式是所有关系型数据库的最基本要求。
举例说明:
第一种表设计:
| 地址 |
|---|
| 青青草原,羊村,肥羊小学 |
第二种表设计:
| 小镇 | 村 | 具体地址 |
|---|---|---|
| 青青草原 | 羊村 | 肥羊小学 |
阐述:
第一种表设计不满足第一范式,为什么不满足第一范式?因为地址列不具有原子性,能拆分成省份、市和具体地址;
- 第二范式(2NF):是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)
- 第二范式要求确保表中每列与主键相关,而不能只与主键的某部分相关(主要针对联合主键),主键列与非主键列遵循完全函数依赖关系,也就是完全依赖
举例说明:
第一种表设计::
| 学号 | 姓名 | 系名 | 系主任 | 课程名 | 分数 |
|---|---|---|---|---|---|
| 001 | 喜洋洋 | 信息工程系 | 羊村村长 | 《如何打败灰太狼》 | 95 |
| 001 | 喜洋洋 | 信息工程系 | 羊村村长 | 《如何打败灰太狼它老婆》 | 95 |
| 001 | 喜洋洋 | 信息工程系 | 羊村村长 | 《如何收养小灰灰》 | 60 |
| 002 | 美洋洋 | 信息工程系 | 羊村村长 | 《如何收养小灰灰》 | 100 |
| 002 | 美洋洋 | 信息工程系 | 羊村村长 | 《如何打败灰太狼》 | 60 |
| 002 | 美洋洋 | 信息工程系 | 羊村村长 | 《如何打败灰太狼它老婆》 | 60 |
| 003 | 懒洋洋 | 没关系 | 黑大帅 | 《青草100种烹饪方法》 | 60 |
| 003 | 懒洋洋 | 没关系 | 黑大帅 | 《毛选》 | 100 |
| 003 | 懒洋洋 | 没关系 | 黑大帅 | 《思政》 | 100 |
第二种表设计(分开两个表,将表拆分为每列可依赖于首列的两张表)
选课表:
| 学号 | 课程名 | 分数 |
|---|---|---|
| 001 | 如何打败灰太狼》 | 95 |
| 001 | 《如何打败灰太狼它老婆》 | 95 |
| 001 | 《如何收养小灰灰》 | 60 |
| 002 | 《如何收养小灰灰》 | 100 |
| 002 | 《如何打败灰太狼》 | 60 |
| 002 | 《如何打败灰太狼它老婆》 | 60 |
| 003 | 《青草100种烹饪方法》 | 60 |
| 003 | 《毛选》 | 100 |
| 003 | 《思政》 | 100 |
人员表:
| 学号 | 姓名 | 系名 | 系主任 |
|---|---|---|---|
| 001 | 喜洋洋 | 信息工程系 | 羊村村长 |
| 001 | 喜洋洋 | 信息工程系 | 羊村村长 |
| 001 | 喜洋洋 | 信息工程系 | 羊村村长 |
| 002 | 美洋洋 | 信息工程系 | 羊村村长 |
| 002 | 美洋洋 | 信息工程系 | 羊村村长 |
| 002 | 美洋洋 | 信息工程系 | 羊村村长 |
| 003 | 懒洋洋 | 没关系 | 黑大帅 |
| 003 | 懒洋洋 | 没关系 | 黑大帅 |
| 003 | 懒洋洋 | 没关系 | 黑大帅 |
阐述:
就是根据主键或者联合主键,将一个表最有关联的属性分别放在一起
- 第三范式(3NF):是在第二范式的基础上建立起来的。第三范式指:属性不依赖于其他非主属性
- 第三范式确保主键列之间没有传递函数依赖关系,也就是消除传递依赖
举例说明:
继续 第二范式 继续拆分:
选课表:
| 学号 | 课程名 | 分数 |
|---|---|---|
| 001 | 如何打败灰太狼》 | 95 |
| 001 | 《如何打败灰太狼它老婆》 | 95 |
| 001 | 《如何收养小灰灰》 | 60 |
| 002 | 《如何收养小灰灰》 | 100 |
| 002 | 《如何打败灰太狼》 | 60 |
| 002 | 《如何打败灰太狼它老婆》 | 60 |
| 003 | 《青草100种烹饪方法》 | 60 |
| 003 | 《毛选》 | 100 |
| 003 | 《思政》 | 100 |
学生表:
| 学号 | 姓名 | 系名 |
|---|---|---|
| 001 | 喜洋洋 | 信息工程系 |
| 002 | 美洋洋 | 信息工程系 |
| 003 | 懒洋洋 | 没关系 |
系表:
| 系名 | 系主任 |
|---|---|
| 信息工程系 | 羊村村长 |
| 没关系 | 黑大帅 |
阐述:
第三范式,在表中,一个系名能确定一个系主任。这样,系名依赖于学号和(学生)姓名,而系主任又依赖于系名,这就导致了传递依赖,3NF就是消除这种依赖。
版权声明:本文为weixin_44355591原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。