第五章关系数据库设计理论 5.1 数据依赖 5.2 范式 5.3 关系模式的规范化
5.1 数据依赖 5.1.1 关系模式中的数据依赖 完整的关系模式的描述:R(U,D,DOM,F) D是U的取值范围,是域的集合 DOM是属性向域映象的集合 F是属性间数据的依赖关系集合 关系模式是静态的、稳定的;关系是动态的,不同时刻关系模式中的关系可能不同,但关系都必须满足关系模式中数据依赖关系集合F指定的完整性约束 影响数据库模式设计的主要是U和F,所以一般关系模式简化为:R(U, F)
5.1.2 数据依赖对关系模式的影响 数据依赖有: 一个关系模式示例 该关系模式存在如下问题 : 函数依赖、多值依赖和连接依赖 U={Sno,Sdept,Mname,Cname,Grade} F={Sno->Sdept, Sdept->Sname, (Sno,Cname)->Grade} 该关系模式存在如下问题 : 数据冗余太大:系主任名字重复出现,和所有学生的所有课程成绩次数一样 更新异常:更换系主任必须修改每一个学生信息 插入异常:刚成立的系如果还没有招生就无法存储系主任信息 删除异常:某个系的学生全部毕业删除时会丢失系主任信息
5.1.3 相关概念 函数依赖 平凡的和非平凡的函数依赖 R(U)是一个关系模式,U是R的属性集合,X和Y是U的子集,对于R(U)的任意一个可能的关系r,如果r中不存在两个元组w,v,使得w[X]=v[X]而w[Y]<>v[Y],称X函数决定Y,或Y函数依赖于X,记X->Y 平凡的和非平凡的函数依赖 关系模式R(U), X和Y是U的子集,如果X->Y,且YX,则称X->Y是非平凡的函数依赖,否则称平凡的函数依赖,我们讨论的都是非平凡的函数依赖
完全函数依赖和部分函数依赖 传递函数依赖 码的重新定义 关系模式R(U),如果X Y,且对于任意的X的真子集X’都有X’ \ Y,则称Y完全函数依赖于X,记X f Y。反之则Y不完全依赖于X,称Y部分依赖于X,记X P Y 传递函数依赖 关系模式R(U),如果X->Y,Y->Z,且Y \ X,则称Z传递函数依赖于X,记X t Z 码的重新定义 关系模式R(U,F),K为属性组合,若K f U,则K是一个候选码。
5.2 范式 范式定义 数据依赖满足某种条件级别的关系模式的集合 目前共6种范式: 1NF2NF3NFBCNF4NF5NF
例:SCL(S#, SN, SA, CLS, MON, C#, CN, CRD, GR) 属于1NF它有以下问题: 数据冗余大,如MON,CRD等 插入异常,当无课程时学生信息无法插入 删除异常,当某个学生的选课信息全部删除时无法保留学生基本信息
SCL存在的函数依赖关系 (S#,C#) f GR (S#,C#) P SN S# f SN (S#,C#) P SA S# f SA (S#,C#) P CLS S# f CLS (S#,C#) P CN C# f CN (S#,C#) P CRD C# f CRD CLS MON S# t MON
例:S_L(S#,SN,SA,CLS,MON) C(C#,CN,CRD) S_C(S#,C#,GR)都属于2NF 存在问题: 如果一个关系模式R1NF,并且每一非主属性都完全依赖于R的码,则R2NF。 显然码只包含一个属性的R如果是1NF,则必是2NF 例:S_L(S#,SN,SA,CLS,MON) C(C#,CN,CRD) S_C(S#,C#,GR)都属于2NF 存在问题: 数据冗余大,如MON 插入异常,无学生信息无法插入班长信息 删除异常,当学生的信息删除无法保存班长
函数依赖关系: S# f SA S# f CLS S# f SN CLS MON S# t MON C# f CN C# f CRD (S#,C#) f GR
5.2.3 第三范式(3NF) 3NF定义 例:S(S#,SN,SA,CLS) L(CLS,MON) C(C#,CN,CRD) 如果一个关系模式R中不存在非主属性对码的传递依赖,则R3NF 例:S(S#,SN,SA,CLS) L(CLS,MON) C(C#,CN,CRD) S_C(S#,C#,GR)都属于3NF
例:STC(S,T,C) S学生 T教师 C课程 (S,C)->T (S,T)->C T->C 所以STC不是BCNF 5.2.4 BC范式(BCNF) BCNF定义 如果一个关系模式R(U,F)1NF,对R中的任意一个非平凡的函数依赖X->Y,X都含有候选码,则RBCNF 例:STC(S,T,C) S学生 T教师 C课程 (S,C)->T (S,T)->C T->C 所以STC不是BCNF 分解为:ST(S,T),TC(T,C) 则都属于BCNF
5.2.5 第四范式(4NF) 多值依赖 关系模式R(U)属性集U,X、Y和Z是U不相交的子集,且Z=U-X-Y,若关系模式R的任一关系r对于X的一个给定值,存在Y的一组值与之对应,且Y的这一组值与Z无关,称Y多值依赖于X,记X->->Y。当Z非空时称非平凡的多值依赖 4NF定义 如果一个关系模式R(U,F)1NF,对R中的任意一个非平凡的多值依赖X->->Y,X都含有候选码,则R4NF
例: CTX(C,T,X) C 课程, T 教师, X 参考书 候选码:(C,T,X) C->->T,C->->X,C不是候选码,故CTX不属于4NF 分解为CT(C,T),CX(C,X),则都满足4NF
5.2.6 第五范式(5NF) 定义 关系模式R,其属性集U,X1,X2......Xn分别为U的子集,Xi=U,如果对于R的每一个关系r都有r=Xi,则称连接依赖(JD)在关系模式R上成立,记为*(X1,X2,......Xn),若某个Xi就是R,称平凡的连接依赖。 如果一个关系模式R(U,F)1NF,对R中的任意一个连接依赖都都由候选码蕴涵,则R5NF
例:关系AFP AFP AF FP AP A F P a1 f1 p1 p2 f2 a2 f3 A F a1 f1 f2 a2 f3 F P
只有AF、FP、AP 三个关系连接才可以得到AFP,因此称 AFP具有连接依赖JD*(A,F,P)
5.3 关系模式的规范化 5.3.1 关系模式的规范化步骤 1NF 消除决定属性集非码的非平凡函数依赖 消除非主属性对码的部分函数依赖关系 消除非主属性对码的传递函数依赖关系 3NF 消除主属性对码的部分函数依赖关系 BCNF 消除非主属性的非平凡的多值依赖 4NF 消除非候选码蕴涵的连接依赖 5NF
5.3.2 关系模式的分解 关系模式的规范化 通过对关系模式的分解来实现的 把低级别的关系模式分解为高级别的关系模式 分解不唯一,只有保证分解后的关系模式与原关系模式等价,才有意义
例: 关系模式SL(Sno,Sdept,Sloc) Sno->Sdept,Sdept->Sloc, Sno->Sloc 95001 CS A 95002 IS B 95003 MA C 95004 95005 PH
分解方法一: SN(Sno)、SD(Sdept)、SO(Sloc) SN、SD、SO都是很高的范式,属于5NF,但分解后 丢失很多信息 SN 95001 CS A 95002 IS B 95003 MA C 95004 95005 PH
分解方法二: NL(Sno,Sloc)、DL(Sdept,Sloc) 分解后的关系 NL和DL的自然连接结果 NL DL Sno Sloc 95001 A CS 95002 B IS 95003 C MA 95004 PH 95005 Sno Sdept Sloc 95001 CS A 95002 IS B PH 95003 MA C 95004 95005
定义 NL和DL的自然连接结果 多出三个元组,而实际上无法确定哪个是多余的,因此丢失了信息 如果关系模式R(U,F)在分解为若干个关系模式Ri(Ui,Fi)后(其中U=Ui),若Ri的自然连接和原关系相等,则称该分解具有无损连接性
分解方法三 ND(Sno,Sdept)、NL(Sno,Sloc) 分解后关系 ND NL Sno Sdept Sloc 95001 CS A 95002 IS B 95003 MA C 95004 95005 PH
NL和DL的自然连接结果 和原关系相同,但当某个学生转系后需要修改两个表,如95005转为CS系后需PH->CS,B->A。原因是分解时丢失了Sdept->Sloc的函数依赖关系。 定义 如果在分解过程中原函数依赖F被每个分解后的某个关系函数依赖Fi所逻辑蕴涵,则称该分解是保持函数依赖的
分解方法四 ND(Sno,Sdept)、DL(Sdept,Sloc) 分解后关系 95001 CS A 95002 IS B 95003 MA C 95004 PH 95005 NL和DL的自然连接结果和原关系相同,该分解是保持函数依赖的
衡量关系分解有两个标准 关系分解理论定理 是否具有无损连接性 是否保持了函数依赖 若要求关系模式分解具有无损连接性,则分解一定可达到4NF 若要求关系模式分解保持函数依赖,则分解一定可达到3NF,但不一定达到BCNF 若要求关系模式分解既具有无损连接性,又保持函数依赖,则分解一定可达到3NF,但不一定达到BCNF