|
既使关系模式是1NF。但很可能具有不受欢迎的冗余和异常现象。因此需把关系模式作进一步的规范化。 如果关系模式中存在局部依赖,就不是一个好的模式,需要把关系模式分解,以排除局部依赖,使模式达到2NF的标准。具体定义如下。 |
1.定义 对于函数依赖W→A,如果存在XW有X→A成立,那么称W→A是局部依赖(A局部依赖于W);否则称W→A是完全依赖。完全依赖也称为“左部不可约依赖”。 |
2.定义 如果A是关系模式R的候选键中属性,那么称A是R的主属性;否则称A是R的非主属性。 |
3.定义 如果关系模式R是1NF,且每个非主属性完全函数依赖于候选键,那么称R是第二范式(2NF)的模式。如果数据库模式中每个关系模式都是2NF,则称数据库模式为2NF的数据库模式。 |
4.不满足2NF的关系模式中必定存在非主属性对关键码的局部依赖 |
5.实例 (1)问题:设关系模式R(S#,C#,SCORE,T#,TITLE)的属性分别表示学生学号、选修课程的编号、成绩、任课教师工号和教师职称等意义。 (2)(S#,C#)是R的候选键。 (3)R上有两个FD ①(S#,C#)→(SCORE) ②C#→(T#,TITLE) (4)R不是2NF模式 ①C#→(T#,TITLE)的FD是局部依赖 (5)存在问题 ①此时R的关系就会出现冗余和异常现象。 ②譬如某一门课程有100个学生选修,那么在关系中就会存在100个元组,因而教师的工号和职称就会重复100次。 |
(6)分解 ①如果把R分解成R1(C#,T#,TITLE)和R2(S#,C#,SCORE)。 ②R1的键是C#,函数依赖C#→(T#,TITLE)是完全依赖。 ③R1和R2则都是2NF模式。 |
6.分解成2NF模式集的算法 ①设关系模式R(U),主键是W,R上还存在函数依赖X→Z,并且Z是非主属性和XW,那么W→Z就是一个局部依赖。此时应把R分解成两个模式。 ②R1(XZ),主键是X。 ③R2(Y),其中Y=U-Z,主键仍是W,外键是X(参照R1)。 ④利用外键和主键的连接可以从R1和R2重新得到R。 ⑤如果R1和R2还不是2NF,则重复上述过程,一直到数据库模式中每一个关系模式都是2NF为止。 |