关系数据库范式理论是在数据库设计过程中将要依据的准则,数据库结构必须要满足这些准则,才能确保数据的准确性和可靠性。这些准则成为规范化形式,即范式。
范式按照规范化的级别分为5种,即第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范式(5NF)。在实际的数据库设计过程中,通常需要用到的是前3个范式。
1,第一范式(1NF)
第一范式要求每一个数据项都不能拆分成两个或两个以上的数据项,即数据库表中的字段都是单一属性的,不可再分。
学号 | 姓名 | 性别 | 年龄 | 家庭地址 |
180127 | 艾珊珊 | 女 | 19 | 武汉市江汉区友谊路48号,邮编430022 |
180133 | 肖梦仪 | 女 | 18 | 武汉市汉阳区鹦鹉大道102号,邮编430050 |
不符合第一范式的学生信息表
学号 | 姓名 | 性别 | 年龄 | 家庭地址 | 邮编 |
180127 | 艾珊珊 | 女 | 19 | 武汉市江汉区友谊路48号 | 430022 |
180133 | 肖梦仪 | 女 | 18 | 武汉市汉阳区鹦鹉大道102号 | 430050 |
符合第一范式的学生信息表
2,第二范式(2NF)
如果一个表已经满足了第一范式,而且该数据表中的任何一个非主键字段的数值都依赖于该数据表的主键字段,那么该数据表满足第二范式。
学号 | 姓名 | 年龄 | 课程名 | 成绩 | 学分 |
180127 | 艾珊珊 | 19 | 数据库原理及应用 | 87 | 4 |
180133 | 肖梦仪 | 18 | 公共英语 | 79 | 2 |
不符合第二范式的学生选课信息表
例如,上表中若以学号为关键字(即主键),就会存在如下决定关系。
(学号) 决定 (姓名、年龄、课程名、成绩、学分)
但是,学分取决于课程
在上面的决定关系中,还可以进一步拆分为如下两种决定关系
(学号) 决定 (姓名、年龄)
(课程) 决定 (学分)
所以这个关系表不满足第二范式。
对于上面的这种关系,可以更改为如下3个表:
学号 | 姓名 | 年龄 |
180127 | 艾珊珊 | 19 |
180133 | 肖梦仪 | 18 |
表1学生信息表
课程编号 | 课程名 | 学分 |
Z003 | 数据库原理及应用 | 4 |
J001 | 公共英语 | 2 |
表2 课程信息表
学号 | 课程号 | 成绩 |
180127 | Z003 | 87 |
180133 | J001 | 79 |
表3 选课信息表
3,第三范式(3NF)
如果一个数据表已经满足了第二范式,而且该数据表中的任何两个非主键字段的数值之间不存在函数依赖关系,那么该数据表满足第三范式。
学号 | 姓名 | 年龄 | 所在学院 | 学院地点 | 学院电话 |
180127 | 艾珊珊 | 19 | 信息学院 | 4号教学楼 | 81655887 |
180133 | 肖梦仪 | 18 | 电子学院 | 2号教学楼 | 81655896 |
例如,上表中若以学号为关键字(即主键),就会存在如下决定关系。
(学号) 决定 (姓名、年龄、所在学院、学院地点、学院电话)
姓名、年龄、所在学院、学院地点、学院电话的确与学号有关,这个数据库是符合第二范式的。
但实际上,学号决定学生所在学院,而学院地点、学院电话其实是与所在学院有关,即
学号 -> 所在学院 -> 学院地点、学院电话
学院地点和学院电话与学号存在传递函数依赖。
应该把该表拆分成一下2个表
学号 | 姓名 | 年龄 | 所在学院 |
180127 | 艾珊珊 | 19 | 信息学院 |
180133 | 肖梦仪 | 18 | 电子学院 |
表1 学生信息表
学院名称 | 学院地点 | 学院电话 |
信息学院 | 4号教学楼 | 81655887 |
电子学院 | 2号教学楼 | 81655896 |
表2 学院信息表