是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值
不符合第一范式
学号 | 姓名 | 班级信息 |
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 范式,只要数据库的设计可以提高整个数据库的性能,这就是一个合理的数据库