关系型数据库通过三大范式,建立冗余较小,结构合理的数据库。
1.第一范式。
第一范式是最基本的范式。其中的所有字段都是!不可再分!的原子。
例:我们访问一个学生在校的住址时如果要确定到床位,那就要如下表所示:
学生住宿信息表
学号 | 宿舍楼 | 宿舍号 | 床位 |
1610000001 | 3 | 121 | 1 |
1610000002 | 3 | 121 | 2 |
1610000003 | 3 | 121 | 3 |
如果我们要确定到床位,表中只到宿舍,那就不是第一范式。
2.第二范式。
第二范式是在第一范式的基础上更进一层。要确保其中每一列都与主键相关(一个表中只有一个主键)。
例:如下表,其中宿舍人数和主键学号不相关,不符合要求。
学生住宿信息表
学号 | 宿舍楼 | 宿舍号 | 床位 | 宿舍人数 |
1610000001 | 3 | 121 | 1 | 6 |
1610000002 | 3 | 121 | 2 | 6 |
1610000003 | 3 | 121 | 3 | 6 |
可以将宿舍人数分开到另一个表中形成两个表使其都满足第二范式。
学生住宿信息表
学号 | 宿舍楼 | 宿舍号 | 床位 |
1610000001 | 3 | 121 | 1 |
1610000002 | 3 | 121 | 2 |
1610000003 | 3 | 121 | 3 |
宿舍信息表
宿舍号 | 学号 | 宿舍楼 | 人数 |
121 | 1610000001 | 3 | 6 |
121 | 1610000002 | 3 | 6 |
121 | 1610000003 | 3 | 6 |
3.第三范式。
在第二范式的基础上更近一层。要确保每一列都要与主键!直接!相关。
例:如上图的宿舍信息表学号与主键不直接相关,应改为如下表:
宿舍信息表
宿舍号 | 宿舍楼 | 人数 |
121 | 3 | 6 |
121 | 3 | 6 |
121 | 3 | 6 |
想要对 范式理解透彻需要对具体的例子进行训练,只看概念是不够的。