1、数据库原理与应用,高等院校计算机教材系列,第7章 关系数据库规范化理论,7.1 函数依赖 7.2 关系规范化 7.3 关系模式的分解准则,7.1 函数依赖,定义:如果有一个关系模式R(A1,A2,An),X 和Y为A1,A2,An的子集,那么对于关系R中的任意一个X值,都只有一个Y 值与之对应,则称X函数决定Y,或Y函数依赖于X。例:Student(Sno, SName, Sdept, Sage) SnoSName, SnoSdept, SnoSage例: SC(Sno, Cno, Grade) (Sno, Cno)Grade,一些术语和符号,1. 如果XY,但Y不包含于X,则称XY是非平凡的
2、函数依赖。如不作特别说明,我们总是讨论非平凡函数依赖。 2. 如果Y不函数依赖于X,则记作X/Y。 3. 如果XY,则称X为决定因子。 4. 如果XY,并且YX,则记作XY。,一些术语和符号,5. 如果XY,并且对于X的一个任意真子集X 都有X /Y,则称Y完全函数依赖于X,记作:,6.如果XY(非平凡函数依赖,并且Y/X)、YZ,则称Z传递函数依赖于X。,如果XY成立,则称Y部分函数依赖于X,记作:,示例,例1:有关系模式:SC(Sno,Sname,Cno,Credit,Grade) 则函数依赖关系有:SnoSname (Sno, Cno) Sname (Sno, Cno) Grade,示例
3、,例2:有关系模式:S(Sno,Sname,Dept,Dept_master) 函数依赖关系有: Sno,由于:Sno Dept ,Dept Dept_master所以有:Sno Dept_master,Sname,为什么要讨论函数依赖,存在问题,数据冗余问题 数据更新问题 数据插入问题 数据删除问题,7.2 关系规范化,7.2.1 关系模式中的码 7.2.2 范式,7.2.1 关系模式中的码,1候选码:设K为R (U,F)中的属性或属性组,若K fU,则K为R候选码。(K为决定R全部属性值的最小属性组)。主码:关系R (U,F)中可能有多个候选码,则选其中一个作为主码。全码:候选码为整个属性
4、组。主属性与非主属性:在R (U,F)中,包含在任一候选码中的属性称为主属性,不包含在任一候选码中的属性称为非主属性,示例,例:SC(SNO,CNO,Grade)候选码:(SNO,CNO),也为主码主属性:SNO,CNO,非主属性:Grade 例:R(P,W,A), P演奏者,W作品,A听众语义:一个演奏者可演奏多个作品,某一作品可被多个演奏者演奏;听众也可欣赏不同演奏者个不同作品。候选码:(P,W,A)全码(演奏者、作品、听众 一场音乐会),7.2.1 关系模式中的码(续),外码:用于关系表之间建立关联的属性(组)。 定义:若R(U,F)的属性(组)X(X属于U)是另一个关系S的主码,则称X
5、为R的外码。,7.2.2 范式,关系数据库中的关系要满足一定的要求,满足不同程度要求的为不不同的范式。,第一范式,第一范式:不包含重复组的关系。,第二范式,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(Sn
6、o,)C(Cno,)S-C(Sno, Cno,) 然后,将依赖于这些主码的属性放置到相应的表中S-L(Sno,Sdept, Sloc)C(Cno)S-C(Sno, Cno, Grade) 最后,去掉只由主码的子集构成的表,最终分解为:S-L(Sno,Sdept, Sloc)S-C(Sno, Cno, Grade),S-L(Sno,Sdept, Sloc)存在问题,数据冗余 :有多少个学生就有多少个重复的Sdept和SLOC; 插入异常:当新建一个系时,若还没有招收学生,则无法插入;,第三范式,定义:如果R(U,F)2NF,并且所有非主属性都不传递依赖于主码,则R(U,F)3NF。 对S-L(S
7、no,Sdept,SLOC) Sno传递SLOC, 不是3NF,分解过程,(1)对于不是候选码的每个决定因子,从表中删去依赖于它的所有属性; (2)新建一个表,新表中包含在原表中所有依赖于该决定因子的属性; (3)将决定因子作为新表的主码。S-L分解后的关系模式为: S-D(Sno, Sdept) S-L(Sdept, Sloc),BCNF,例:关系模式:CSZ(City,Street,Zip) 语义:城市和街道可以决定邮政编码,邮政编码可以决定城市。 候选码:(City,Street),( Street,Zip) F:(City,Street) Zip ,Zip City 是3NF 存在的问
8、题: 插入异常,删除异常,BCNF(续),R1NF,且能决定其它属性取值的属性(组)必定包含码,则其是BCNF 如果一个关系的每个决定因素都是候选码,则其是BCNF 如果一个关系的每个函数依赖的左部都是候选码,则其是BCNF 如果R3NF,并且不存在主属性对非主属性的函数依赖,则其是BCNF,BCNF和3NF的关系,若RBCNF,则R3NF 若R3NF,则R不一定属于BCNF,规范化举例,设有关系模式:Student(学号,姓名,导师号,导师名,课程号,课程说明,成绩) 语义:一名学生只有一个导师,学生可选多门课。 将其规范化成3NF的。,1此表是1NF,其函数依赖为:学号p姓名,学号p导师号
9、,学号p导师名,课程号p课程说明,(学号,课程号)成绩 主码为(学号,课程号) 存在部分函数依赖关系,不是2NF,首先将其分解为2NF。,学生(学号,姓名,导师号,导师名), 课程(课程号,课程说明), 成绩(学号,课程号,成绩) 均为2NF,2判是否为3NF “学生”表不是3NF,其函数依赖为:学号姓名,学号导师号,导师号p导师名,学号传递导师名 消除依赖于决定者的属性,把它们放在一个单独的表中,得到: 学生(学号,姓名,导师号),导师(导师号,导师名),7.3 关系模式的分解准则,模式分解要满足: 模式分解具有无损连接性; 模式分解能够保持函数依赖。无损连接是指分解后的关系通过自然连接可以
10、恢复成原来的关系,即通过自然连接得到的关系与原来的关系相比,既不多出信息、又不丢失信息。保持函数依赖分解是指在模式的分解过程中,函数依赖不能丢失的特性,即模式分解不能破坏原来的语义。,关系模式的分解准则(续),例:S-D-L(Sno,Dept,Loc)有函数依赖:Sno Dept, Dept Loc不是第三范式的。至少可以有三种分解方案,分别为: 方案1:S-L(Sno,Loc),D-L(Dept,Loc) 方案2:S-D(Sno,Dept),S-L(Sno,Loc) 方案3:S-D(Sno,Dept),D-L(Dept,Loc)这三种分解方案得到的关系模式都是第三范式的,那么如何比较这三种方
11、案的好坏呢?由此在将一个关系模式分解为多个关系模式时除了提高规范化程度之外,还需要考虑其他的一些因素。,关系模式的分解准则(续),将一个关系模式R分解为若干个关系模式R1,R2,Rn,意味着将存储在一张二维表r中的数据分散到了若干个二维表r1,r2,rn中。这样的分解应该不丢失信息,即能通过对关系r1,r2,rn的自然连接运算重新得到关系r中的所有信息。 事实上,将关系r投影为r1,r2,rn时不会丢失信息,关键是对r1,r2,rn做自然连接时可能产生一些r中原来没有的元组,从而无法区别哪些元组是r中原来有的,即数据库中应该存在的数据,哪些是不应该有的。在这个意义上就丢失了信息。,关系模式的分
12、解准则(续),这三种分解方案是否都满足分解要求呢? 假设此关系模式的数据如表所示,此关系用r表示。,关系模式的分解准则(续),若按方案1将S-D-L投影到S-L和D-L的属性上,得到如左边两个表所示的关系。做自然连接得到结果如右表所示。,关系模式的分解准则(续),无损连接性 将关系模式R分解为个关系模式R1,R2,Rn,若对于R中的任何一个可能的r,都有r r1*r2*rn,即r在R1,R2,Rn上的投影的自然连接等于r,则称关系模式R的这个分解具有无损连接性。,关系模式的分解准则(续),再分析方案2。将S-D-L投影到S-D,S-L的属性上,得到的关系如左边两个表所示。做自然连接得到的关系右表所示。,关系模式的分解准则(续),方案2自然连接后恢复成了原来的关系,因此,分解方案2具有无损连接性。 但分解方案2没有保持原有的函数依赖关系,也不是好的分解方法。,关系模式的分解准则(续),分解方案3既满足无损连接性,又保持了原有的函数依赖关系,因此它是有个好的分解方法。 分解具有无损连接性和分解保持函数依赖是两个独立的标准。具有无损连接性的分解不一定保持函数依赖;保持函数依赖的分解不一定具有无损连接性。 一般情况下,在进行模式分解时,应将有直接依赖关系的属性放置在一个关系模式中,这样得到的分解结果一般能具有无损连接性,并能保持函数依赖关系不变。,