第一范式(原子性)
是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值
不符合第一范式
学号 |
姓名 |
班级信息 |
001 |
张三 |
园艺园林学院园林172 |
002 |
李四 |
信息工程学院计科182 |
符合第一范式
学号 |
姓名 |
院系 |
班级 |
001 |
张三 |
园艺园林学院 |
园林172 |
002 |
李四 |
信息工程学院 |
计科182 |
第二范式(完全依赖主键)
需要确保数据库表中每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。一张表中出现数据重复就可以将其拆分成两个表
不符合第二范式
学生id |
宿舍id |
宿舍名 |
001 |
1 |
kb#327 |
002 |
2 |
三#301 |
003 |
1 |
kb#327 |
符合第二范式
学生id |
宿舍id |
001 |
1 |
002 |
2 |
003 |
1 |
宿舍id |
宿舍名 |
1 |
kb#327 |
2 |
三#301 |
第三范式(直接依赖主键)
需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。
不符合第三范式
学号 |
姓名 |
院系 |
院系地址 |
001 |
张三 |
园艺园林学院 |
团委A段 |
002 |
李四 |
信息工程学院 |
0号楼 |
符合第三范式
学号 |
姓名 |
院系id |
001 |
张三 |
01 |
002 |
李四 |
02 |
院系id |
院系 |
院系地址 |
01 |
园艺园林学院 |
团委A段 |
02 |
信息工程学院 |
0号楼 |
有时为了满足查询速度,可以有意识的让某些表有些冗余,这是为了提高整个数据库的性能,所以有些时候,不一定要拘泥于达到第三范式或bcn 范式,只要数据库的设计可以提高整个数据库的性能,这就是一个合理的数据库