数据库三大范式是什么?
- 第一范式(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就是消除这种依赖。