关系型数据库通过三大范式,建立冗余较小,结构合理的数据库。
以下是我对范式的一些理解,请大家指正。
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 |
想要对 范式理解透彻需要对具体的例子进行训练,只看概念是不够的。