数据库模式分解的原则是什么 10
推荐于2017-09-12 · 知道合伙人数码行家
关系模式的分解准则
关系模式的规范化过程是通过对关系模式的分解来实现的。把低一级的关系模式分解为若干个高一级的关系模式。这种分解不是唯一的。
规范化的方式是进行模式分解,模式分解的原则是与原模式等价,模式分解的标准是:
模式分解具有无损连接性
模式分解能够保持函数依赖
举例:关系规范化过程
第一范式(1NF):如果一关系模式,它的每一个分量是不可分的数据项,即其域为简单域,则此关系模式为第一范式。
例:将学生简历及选课等数据设计成一个关系模式STUDENT, 其表示为:
STUDENT(SNO,SNAME,AGE,SEX,CLASS,DEPTNO,DEPTNAME,CNO,
CNAME,SCORE,CREDIT)
设该关系模式满足下列函数依赖:
F={SNO-->SNAME, SNO-->AGE, SNO-->SEX, SNO-->CLASS,CLASS-->DEPTNO, DEPTNO-->DEPTNAME, CNO-->CNAME,SNO.CNO-->SCORE, CNO-->CREDIT}
由于该关系模式的每一属性对应的域为简单域,即其域值不可再分,符合第一范式定义,所以STUDENT关系模式为第一范式。
第二范式(2NF):若关系模式R?1NF,且每个非主属性完全函数依赖于码,则称R?2NF。
分析一下关系模式STUDENT, 它是不是2NF ?
属性组(SNO,CNO)为关系STUDENT的码。
例如:SNAME非主属性,根据码的特性具有:SNO.CNO??SNAME
根据STUDENT关系模式已知函数依赖集,下列函数依赖成立:SNO??SNAME
所以SNO.CNO??SNAME, SNAME对码是部分函数依赖。同样方法可得到除SCORE属性外,其它非主属性对码也都是部分函数依赖。所以STUDENT关系模式不是2NF。
当关系模式R是1NF而不是2NF的模式时,对应的关系有何问题呢?我们分析STUDENT关系模式,会有下列问题:
存在大量的冗余数据:当一个学生在学习多门课程后,他的人事信息重复出现多次。
根据关系模型完整性规则,主码属性值不能取空值。那么新生刚入学,还未选修课程时,该元组就不能插入该关系中。这种情况称为插入异常。
同样还有删除异常,则会丢失信息
解决上述问题方法是将大的模式分解成多个小的模式,分解后的模式可满足更高级的范式的要求。
1NF:属性不可再分,即不能表中套表
2NF:不存在非主属性对码的部分函数依赖
3NF:不存在非主属性对码的传递函数依赖
BCNF:不存在主属性对码的部分依赖和传递
即使BCNF仍然存在不足,比如下表
科目 老师 参考书
语文 张老师 一点通
语文 李老师 黄冈兵法
语文 王老师 巅峰阅读
数学 张老师 黄冈兵法
数学 王老师 一点通
数学 李老师 巅峰阅读
这个表的码是全码满足1,2,3,BC,范式,可以看出,这个表的数据冗余,这就是多值依赖,为了解决多值依赖的问题,我们引进的4NF即消除非平凡且非函数依赖的多值依赖
至于如何分解,则要利用数据依赖的公理系统,把低级的关系模式分解成若干个高一级的关系模式。当然分解不唯一。
eg:
R(U,F)
U(A,B,C,D,E,F)
F(A->B,AC->D,AC->E,E->F)
分解:码 AC
主属性 A,C
非主属性 B,D,E,F
R是1NF不是2NF
R->R1(A,B)为BCNF
R2(A,C,D,E,F)为2NF不是3NF
R2->R21(A,C,D,E)为BCNF
R22(E,F)为BCNF
故R分解成R1,R21,R22
一点小心得,共同进步
2NF,消除非主属性对候选键的的局部依赖(学生,课程,成绩,课程名),课程名只部分依赖于主键中的课程,首先是数据冗余,然后可能更新不一致
3NF,消除非主属性对候选键的的传递依赖(课程,教师,住址,手机), 住址和手机对教师有依赖,教师依赖课程,那么住址要传递依赖于课程,会造成数据冗余,更新丢失教师信息不一致等情况,就要分解(课程,教师),(教师,住址,手机)
BCNF则消除了任何属性对候选键的传递依赖,在3nf的基础上消除了主属性间的传递依赖关系,
选课表 (教师,课程,学生)都是主属性,但是学生依赖于课程,课程依赖于教师,学生传递依赖于教师,所以应该拆成(教师,课程),(课程,学生)
参考:http://wenku.baidu.com/view/d1eaf21aa8114431b90dd8e2.html