数据库学习摘记 —— 关系模式的规范化

范式:

满足不同程度要求的关系模式。

第一范式(简称1NF),第二范式(2NF),第三范式(3NF),BC范式(BCNF),第四范式(4NF)和第五范式(5NF)。各范式之间的关系为 1NF 2NF 3NF BCNF 4NF 5NF。

第一范式:

一个关系模式R(U)的所有属性都是不可再分的基本数据项。所有的关系模式都必须为第一范式。

第二范式:

每一个非主属性完全函数依赖于某个候选键的第一范式。

第三范式:

每一个非主属性不传递函数依赖于R(U)的候选键的第二范式。

此时关系模式R(U)的每一个非主属性既不部分依赖于候选键,也不传递函数依赖于候选键。

     

BC范式:

  • 对于第一范式R(U)的任意一个函数依赖X→Y,当YX时,X必含有候选键,即每一个非平凡函数依赖的决定因素都包含有候选键,则称为BC范式。
  • 对于第一范式R(U)的每个属性都不传递依赖于R的候选键,则称R(U)为BC范式。
  • 此时关系模式R(U)的所有主属性和非主属性既不部分依赖于候选键,也不传递函数依赖于候选键。

   

【设关系模式StudyTeach(Sno,Teacher,Cname)】

每一位教师只教一门课;每门课有若干教师讲授;某一学生选修某一门课,就有一个确定的教师。

由属性及其相互联系的语义可知:

{Sno,Cname}→Teacher;

{Sno,Teacher}→Cname;

Teacher→Cname

关系模式StudyTeach的所有属性都是主属性,因此它没有任何非主属性对候选键传递函数依赖或部分函数依赖,故关系模式StudyTeach是3NF的。

但它不是BCNF的,因为Teacher是决定因素,而Teacher不包含候选键。

   

【设关系模式StudyPlace(Sno, Cname, Place) 】

每个学生学习每门课程都有一定的名次;每门课程中每一名次只有一个学生(无并列名次)

由属性及其相互联系的语义可知:

{Sno, Cname}→Place

{Cname, Place}→Sno

StudyPlace的所有属性都是主属性,即没有非主属性对候选键传递函数依赖或部分函数依赖,故属于3NF。

因为函数依赖的决定因素都包含侯选健,所以它也是BCNF。

   

  • 如果R(U)∈3NF,R(U)有唯一候选键X,则必有R(U)∈BCNF。
  • 当一张表的属性都为主属性时,该表是BCNF。
  • BCNF是在函数依赖的条件下对模式分解所能达到的最高分离程度。
  • 一个数据库模式中的所有关系模式如果都属于BCNF,那么在函数依赖范畴内,已实现了彻底的分离,并基本消除了插入和删除等异常问题。

多值依赖:

设R(U)是属性集U上的一个关系模式,X,Y,Z是U的子集,并且Z=U-X-Y。若对于R(U)的任一具体关系r,r在属性(X,Z)上的每一个值,就有属性Y上的一组值与之对应,且这组值仅仅决定于X上的值而与Z上的值无关,则称Y多值依赖于X,记作X→→Y。

平凡多值依赖:

Z=U-X-Y= Ø

非平凡多值依赖:

Z=U-X-Y≠ Ø

第四范式:

若对于第一范式R(U)的每一个非平凡的多值依赖X→→Y (YX),X都含有候选键,则称R(U)为第四范式,即R(U)∈4NF。

【关系模式DeptInfo(DeptName,Teacher,    Sname)】

有两个多值依赖

DeptName→→Teacher

DeptName→→Sname

尽管是非平凡的多值依赖,但候选键是全键,关系模式DeptInfo不属于4NF

   

【把DeptInfo分解为DeptTeacher(DeptName, Teacher),DeptStudent(DeptName, Sname)】

分别仅有一个平凡的多值依赖

DeptName→→Teacher

DeptName→→Sname

因为不存在任何非平凡的多值依赖,所以关系模式DeptTeacher和DeptStudent都是4NF。

   

猜你喜欢

转载自www.cnblogs.com/kuluo/p/12541454.html