一:【引言】
数据库之范式是数据库关系模式中的重点,对于我们创建更优的关系模式有着至关重要的作用,所以理解三范式的概要,并且能够正确的加以区分是很关键的。
二:【内容】
1.第一范式即1NF,它是关系模式R中关系r的属性值是不可分的原子值,也就是说属性是不能有多个值的,不能有重复的序列。
比如说下面的关系模式:
学号 |
姓名 |
性别 |
地址 |
12 |
常某某 |
女 |
廊坊市 |
12 |
常某某 |
女 |
安阳县 |
从上面的表可知,地址的属性可分,有多值的现象,所以是不符合第一范式的。
2. 第二范式即2NF,是在第一范式的基础之上,非主属性之间不存在局部依赖,实体属性完全依赖于主关键字。也就是在一个关系模式中FD中的主属性决定了非主属性的时候,不存在非主属性之间相互依赖的现象。
比如下面的关系模式R:
学号 |
姓名 |
性别 |
系名 |
地址 |
课程 |
学科成绩 |
12 |
常某某 |
女 |
数信学院 |
西南角 |
数学 |
80 |
13 |
郭某某 |
女 |
数信学院 |
西南角 |
数学 |
70 |
14 |
周某某 |
男 |
数信学院 |
西南角 |
数学 |
69 |
在这个关系中可以明显的看到,存在着数据冗余的情况,如果一个不同的学生选择了同一个课程,那么课程和学分就会出现无数次,就是因为存在局部的依赖性,在这个关系中学分依赖于课程,而不是学号。
而正确的第二范式的关系应该是这样的:
关系模式R1:
学号 |
姓名 |
性别 |
系名 |
地址 |
12 |
常某某 |
女 |
数信学院 |
西南角 |
13 |
郭某某 |
女 |
数信学院 |
西南角 |
14 |
周某某 |
男 |
数信学院 |
西南角 |
关系模式R2:
课程 |
学分 |
数学 |
2.0 |
历史 |
1.0 |
学号 |
课程 |
学科成绩 |
12 |
数学 |
80 |
13 |
数学 |
70 |
14 |
数学 |
69 |
3. 第三范式即3NF,首先应该满足第二范式,然后再满足第二范式的基础之上,属性之间不存在传递依赖。
正如上面的关系模式R优化成第二范式后中的关系模式R1中,系名决定了自己系的地址,所以关系模式优化之后应该分解为四个关系模式:
关系模式R1:
学号 |
姓名 |
性别 |
12 |
常某某 |
女 |
13 |
郭某某 |
女 |
14 |
周某某 |
男 |
系名 |
地址 |
数信学院 |
西南角 |
数信学院 |
西南角 |
数信学院 |
西南角 |
课程 |
学分 |
数学 |
2.0 |
历史 |
1.0 |
学号 |
课程 |
学科成绩 |
12 |
数学 |
80 |
13 |
数学 |
70 |
14 |
数学 |
69 |
三:【总结】
其实第一范式很好理解,但是第二范式和第三范式我们的总是会混淆他们之间的关系,其实第二范式中强调局部依赖优化只是对于属性与属性之间是n:m类型的,比如说学生和课程之间的关系是一个学生可以选择多个课程,一个课程有多个学生选择。主要是分解了他们,而第三范式是在第二范式的基础之上对于关系是1:m的关系进行了分解,比如一个学生之可以在一个系别里,但是一个系别可以选择很多的学生。