本文已参与[新人创作礼]活动,一起开启掘金创作之路。
第一范式(无重复的列)
理解:要求记录的属性是原子性,不可分,就是属性不能分,这是关系型数据库的基本要求,不满足这个就不能叫关系型数据库了
- 通俗点讲(一个字段只存储一项信息)
EG: 班级:高三年级14班,应改为2个字段,一个年级、一个班级,才满足第一范式
| 学号 | 姓名 | 班级 |
|---|
| 0001 | 小红 | 高三年级14班 |
| 满足1NF后为 | |
| 学号 | 姓名 | 年级 | 班级 |
| -- | -- | -- | -- |
| 0001 | 小红 | 高三年级 | 14班 |
第二范式(属性完全依赖于主键)
理解:不能有部分依赖,部分依赖的前提条件是有组合主键,就是每条记录是需要一个主键的,这个主键可以是一个单独的属性,但也可以是组合主键,就是由记录的多个属性来唯一确定一条记录,那么只要出现了组合主键就可以产生部分依赖,部分依赖是组合主键出现的前提下,剩余的属性,不完全依赖于组合主键,也是部分依赖组合主键,比如该表的N条记录中由组合主键中的一条或者几条就可以确定剩余属性的属性,那么就可以说产生部分依赖,而在实际开发中,一般不采用组合主键,而是自己增加一个字段id自增长,作为主键,这样的单属性主键是不会产生部分依赖的!
EG:
| 学生证 | 学生证号 | 借书证 | 借书证号 |
|---|
| | | |
| 满足2NF后为 | | |
| 主键ID | 学生证 | 学生证号 | 借书证 | 借书证号 |
| -- | -- | -- | -- | -- |
| | | |
| 或者改为两张表 | | |
| 学生证 | 学生证号 | |
| -- | -- | - | |
第三范式(属性不能传递依赖于主属性)
理解:满足第二范式前提,如果某一属性依赖于其他非主键属性,而其他非主键属性又依赖于主键,那么这个属性就是间接依赖于主键,这被称作传递依赖于主属性。大白话说就是一张表最多只存2层同类型信息
EG:
| 爸爸 | 儿子 | 女儿 | 女儿的小熊 | 女儿的海绵宝宝 |
|---|
| 满足3NF后 | | |
| 爸爸 | 儿子 | 女儿 | |
| -- | -- | -- | |
参考:blog.csdn.net/weixin_3776…