数据库学习摘记 —— 关系模式的规范化
范式:
满足不同程度要求的关系模式。
第一范式(简称1NF),第二范式(2NF),第三范式(3NF),BC范式(BCNF),第四范式(4NF)和第五范式(5NF)。各范式之间的关系为 1NF ⊆ 2NF ⊆ 3NF ⊆ BCNF ⊆ 4NF ⊆ 5NF。
第一范式:
一个关系模式R(U)的所有属性都是不可再分的基本数据项。所有的关系模式都必须为第一范式。
第二范式:
每一个非主属性完全函数依赖于某个候选键的第一范式。
第三范式:
每一个非主属性不传递函数依赖于R(U)的候选键的第二范式。
此时关系模式R(U)的每一个非主属性既不部分依赖于候选键,也不传递函数依赖于候选键。
BC范式:
-
对于第一范式R(U)的任意一个函数依赖X→Y,当Y⊄X时,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 (Y⊄X),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。