教 师:曾晓东 电 话:13679007201 E_mail:zengxiaodong@263.net 数据库技术 教 师:曾晓东 电 话:13679007201 E_mail:zengxiaodong@263.net
第6章 关系数据库规范化理论 6.1 函数依赖 6.2 关系规范化 6.3 关系模式的规范化
6.1 函数依赖 定义:如果有一个关系模式R(A1,A2,…,An),X 和Y为{A1,A2,…,An}的子集,那么对于关系R中的任意一个X值,都只有一个Y 值与之对应,则称X函数决定Y,或Y函数依赖于X。 例:Student(Sno, SName, Sdept, Sage) Sno→SName, Sno→Sdept, Sno→Sage 例: SC(Sno, Cno, Grade) (Sno, Cno)→Grade
一些术语和符号 1. 如果X→Y,但Y不包含于X,则称X→Y是非平凡的函数依赖。如不作特别说明,我们总是讨论非平凡函数依赖。 3. 如果X→Y,则称X为决定因子。 4. 如果X→Y,并且Y→X,则记作X←→Y。
一些术语和符号(续) 6.如果X→Y(非平凡函数依赖,并且Y—/→X)、Y→Z,则称Z传递函数依赖于X。 5. 如果X→Y,并且对于X的一个任意真子集X’ 都有X’ —/→Y,则称Y完全函数依赖于X,记作: 如果X’→Y成立,则称Y部分函数依赖于X,记作: 6.如果X→Y(非平凡函数依赖,并且Y—/→X)、Y→Z,则称Z传递函数依赖于X。
示例 Sno→Sname (Sno, Cno)→ Sname (Sno, Cno)→ Grade 例1:有关系模式:SC(Sno,Sname,Cno,Credit,Grade) 则函数依赖关系有: Sno→Sname (Sno, Cno)→ Sname (Sno, Cno)→ Grade
示例 由于:Sno Dept ,Dept Dept_master 所以有:Sno Dept_master Sno 例2:有关系模式:S(Sno,Sname,Dept,Dept_master) 函数依赖关系有: Sno Sname 由于:Sno Dept ,Dept Dept_master 所以有:Sno Dept_master
为什么要讨论函数依赖 Sno Sdept SLOC Cno Grade 2公寓 DB 80 OS 85 信息 1公寓 C 90 DS 84 9812101 计算机 2公寓 DB 80 OS 85 9821101 信息 1公寓 C 90 DS 84 9821102 78
存在问题 数据冗余问题 数据更新问题 数据插入问题 数据删除问题
6.2 关系规范化 6.2.1 关系模式中的码 6.2.2 范式
6.2.1 关系模式中的码 1.候选码:设K为R (U,F)中的属性或属性组,若K f→U,则K为R候选码。(K为决定R全部属性值的最小属性组)。 主码:关系R (U,F)中可能有多个候选码,则选其中一个作为主码。 全码:候选码为整个属性组。 主属性与非主属性: 在R (U,F)中,包含在任一候选码中的属性称为主属性,不包含在任一候选码中的属性称为非主属性
示例 例:SC(SNO,CNO,Grade) 例:教师_课程(教师号,课程号,授课学年) 候选码:(SNO,CNO),也为主码 语义:一个教师在一个学年可以讲授多门课程,而且一门课程在一个学年也可以由多个教师讲授,同一个学年可开始多门课程。 候选码:(教师号,课程号,授课学年) 称这样的表为全码表
6.2.1 关系模式中的码(续) 外码:用于关系表之间建立关联的属性(组)。 定义:若R(U,F)的属性(组)X(X属于U)是另一个关系S的主码,则称X为R的外码。
关系数据库中的关系要满足一定的要求,满足不同程度要求的为不不同的范式。 6.2.2 范式 关系数据库中的关系要满足一定的要求,满足不同程度要求的为不不同的范式。 5NF 4NF BCNF 3NF 2NF 1NF
第一范式 第一范式:若关系模式R中的所有属性都是不可分的基 本数据项,则R∈1NF
第二范式 2.第二范式:如果R(U,F)∈1NF,并且R中的每个非主属性都完全函数依赖于主码,则R(U,F)∈2NF 例: S-L-C(Sno,Sdept,SLOC,Cno,Grade) 有:Sno P →SLOC,不是2NF。
分解办法 首先,对于组成主码的属性集合的每一个子集,用它作为主码构成一个表。 然后,将依赖于这些主码的属性放置到相应的表中。 最后,去掉只由主码的子集构成的表。
分解示例 对于S-L-C表,首先分解为如下形式的三张表: 然后,将依赖于这些主码的属性放置到相应的表中 S-L(Sno,…) C(Cno,…) S-C(Sno, Cno,…) 然后,将依赖于这些主码的属性放置到相应的表中 S-L(Sno,Sdept, Sloc) C(Cno) S-C(Sno, Cno, Grade) 最后,去掉只由主码的子集构成的表,最终分解为: S-L(Sno,Sdept, Sloc)
S-L(Sno,Sdept, Sloc)存在问题 插入异常:当新建一个系时,若还没有招收学生,则无法插入;
第三范式 定义:如果R(U,F)∈2NF,并且所有非主属性都不传递依赖于主码,则R(U,F)∈3NF。 3NF基本上能消除冗余和更新异常 对S-L(Sno,Sdept,SLOC) ∵Sno传递→SLOC, ∴不是3NF
分解过程 对于不是候选码的每个决定因子,从表中删去依赖于它的所有属性; 新建一个表,新表中包含在原表中所有依赖于该决定因子的属性; 将决定因子作为新表的主码。 S-L分解后的关系模式为: S-D(Sno, Sdept) S-L(Sdept, Sloc)
BCNF 定义:若 R∈1NF,并且对于每一个非平凡函数依赖X Y,X必含有码,则R∈BCNF。 结论: 所有非主属性都完全函数依赖于每个码 所有主属性都完全函数依赖于每个不包含它的码 没有任何属性完全函数依赖于非码的任何一组属性 3NF与BCNF的关系?
第四范式 多值依赖 定义:设R(U)是属性集U上的一个关系模式,X, Y, Z是U的子集,Z = U-X-Y,若R(U)的任意一个关系,对于(X, Z)的每个值,存在Y的一组值与其对应,且Y的这组值仅仅决定于X值而与Z值的无关,则: Z为空时,称X Y 为平凡的多值依赖 Z非空时,称X Y 为非平凡的多值依赖
多值依赖 C B C T Teach (C, T, B) WMP (W, M, P)
第四范式 WM (W, M) WP (W, P) WMP (W, M, P) ∈4NF 定义:若 R∈1NF,并且对于每一个非平凡多值依赖X Y(Y不被X包含),X必含有码,则R∈4NF。 BCNF与4NF的关系? WM (W, M) WP (W, P) 投影分解 WMP (W, M, P) ∈4NF
6.3 关系模式的规范化 一、关系模式规范化的步骤 1NF 消除非主属性对码的部分函数依赖 2NF 消除非主属性对码的传递函数依赖 3NF 消除主属性对码的部分和传递函数依赖 BCNF 消除非平凡且非函数依赖的多值依赖 4NF 消除不是由候选码所蕴含的连接依赖 5NF* 消除决定属性集非码的 非平凡函数依赖
6.3 关系模式的规范化 二、关系模式的分解 定义:关系模式R(U, F)的分解就是用一组关系模式R1(U1, F1), R2(U2, F2)…, Rn(Un, Fn)来取代R,其中U=U1∪U2∪…∪Un,且不存在Ui Uj,Fi为F在Ui上的投影。 分解后的关系模式应与原关系模式等价
二、关系模式的分解 无损连接的分解 不丢失信息,且定能达到4NF 保持函数依赖的分解 减轻异常,且定能达到3NF 既保持函数依赖又无损连接的分解 定能达到3NF
6.3 关系模式的规范化 例:在一个选课系统中,假设每个学生可以选多门课,但在一门课中只能选一位老师;每门课可以由多个老师授课,每位老师可授多门课。下表给出的关系SC用于描述选课系统。 Sno 学号 Cno 课程号 Ctitle 课程名 Iname 教师姓名 Iloca 教师住址 Grade 成绩 80152 C1 OS 王平 D1 70 80153 C2 DB 李雨 D2 85 80154 86 C3 AI 刘键中 D3 72 80155 C4 CL 92
6.3 关系模式的规范化 问:关系SC为第几范式?是否存在插入、删除异常?若存在,则说明是什么情况下发生?发生的原因是什么?将它分解为高一级范式,分解后的关系能否解决操作异常问题? (1) 本关系中所有的键均不可再分,因此,本关系符合1NF。 由题意,本关系的主键为:(Sno, Cno, Iname)。本关系中有如下函数依赖: Cno→Ctitle、 Iname→Iloca 因此,此关系中存在部分函数依赖,故此关系不符合2NF。由此可知,此关系为1NF。
6.3 关系模式的规范化 (2) 本关系存在插入异常和删除异常。 如果系统中需新增教师、课程均会发生插入异常。因为此时无法确定选课的学生,因此插入的学号将为空,系统会因为主键为空而出错。 按上图如果删除第2、4或5行,均会发生删除异常。因为在删除这些行后,相应的课程和教师的信息也被删除了。
6.3 关系模式的规范化 (3) 将上面的关系分解为如下三个关系可符合2NF及3NF。 Cno 课程号 Ctitle 课程名 C1 OS DB C3 AI C4 CL 课程 选课 Sno 学号 Cno 课程号 Iname 教师姓名 Grade 成绩 80152 C1 王平 70 80153 C2 李雨 85 80154 86 C3 刘键中 72 80155 C4 92 Iname 教师姓名 Iloca 教师住址 王平 D1 李雨 D2 刘键中 D3 这个分解后的关系可解决操作异常问题。 教师
小结 3NF消除了很大一部分数据冗余和更新异常,在通常的数据库设计中,一般要求达到3NF即可。 规范化的过程是通过把范式程度低的关系模式分解为若干个范式程度高的关系模式来实现的。 分解的最终目的是使每个规范化的关系只描述一个主题。 规范化的方法是进行模式分解,但要注意的是分解后产生的模式应与原模式等价,即模式分解不能破坏原来的语义,同时还要保证不丢失原来的函数依赖关系。
小结 在函数依赖范畴内,BCNF是规范化程度最高的; 在多值依赖范畴内,4NF是规范化程度最高的; 连接依赖与5NF。