300 likes | 431 Views
4.1 问题的提出 4.2 规范化 4.3 关系模式的规范化. 第 4 章 关系数据库设计理论. 4.1 问题的提出. 关系数据库逻辑设计问题: 针对一个具体问题,应该如何构造一个适合于它的数据模式? ( 应该构造几个关系模式,每个关系由哪些属性组成等。). 关系数据库规范化理论: 以关系模型为背景发展的数据库逻辑设计的有力工具。. 关系模式中的数据依赖. 关系模式 : 描述关系的五元组 R(U , D , DOM , F)
E N D
4.1问题的提出 4.2规范化 4.3 关系模式的规范化 第 4 章关系数据库设计理论
4.1 问题的提出 • 关系数据库逻辑设计问题: 针对一个具体问题,应该如何构造一个适合于它的数据模式? (应该构造几个关系模式,每个关系由哪些属性组成等。) • 关系数据库规范化理论: 以关系模型为背景发展的数据库逻辑设计的有力工具。
关系模式中的数据依赖 • 关系模式 : 描述关系的五元组 • R(U,D,DOM,F) • 其中R为关系名,U为组成该关系的属性名集合,D为属性组U中属性所来自的域,DOM为属性向域的映象集合,F为属性间数据的依赖关系集合。 • 关系 : • 通常是由赋予它的元组语义来确定的。元组语义实质上是一个n目谓词(n是属性集中属性的个数)。 • 凡使该n目谓词为真的笛卡尔积中的元素(或者说凡符合元组语义的那部分元素)的全体就构成了该关系模式的关系。
属性间数据的依赖关系集合F : 描述关系的元组语义,限定组成关系的各个元组必须满足的完整性约束条件。 • 对属性取值范围的限定 ; • 属性值间的相互关连(主要体现于值的相等与否). 称为数据依赖 • 用三元组 R ( U , F )来表示关系模式 当且仅当U上的一个关系r 满足F时,r称为关系模式R( U, F )的一个关系。
数据依赖是通过一个关系中属性间值的相等与否体现出来的数据间的相互关系。数据依赖是通过一个关系中属性间值的相等与否体现出来的数据间的相互关系。 它是现实世界属性间相互联系的抽象,是数据内在的性质,是语义的体现。 • 两种重要的数据依赖 • 函数依赖(functional dependency,FD) • 多值依赖(multivalued dependency,MVD)
函数依赖 例1:关系模式Student(Sno,Sname,Ssex,Sage,Sdept)中 , Sno函数决定Sname和Sdept ,或Sname和Sdept函数依赖于Sno,记为 Sno -> Sname , Sno->Sdept
Sno Cname Grade Sdept Mname 例2:一个学校数据库中的唯一关系模式Student(U,F ) , 其中 U={Sno,Sdept,Mname,Cname,Grade} F={Sno->Sdept ,Sdept ->Mname, (Sno,Cname) ->Grade } 分解为三个关系模式 Student(Sno,Sdept,Sno->Sdept); SC(Sno,Cname,Grade,(Sno,Cname)->G); Dept(Sdept,Mname,Sdept->Mname); 插入异常 不能插入一个没有学生的系 数据冗余太大 系主任出现的次数和该系学生选课总数相同 Why? 某些数据依赖引起的! 删除异常 删除某系的最后一个学生时(如毕业)会删除系的相关信息
若 Y不函数依赖于X ,则记为X Y 。 4.2 规 范 化 语义范畴的概念 • 规范化理论 1971 E.F.Codd • 函数依赖 : 设R(U)是属性集U上的关系模式,X和Y是U的子集。若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称 X函数确定Y或Y函数依赖于X ,记作 X Y。 • 若 X Y且Y X ,则记为X Y 。 决定因素 (determinant)
非平凡函数依赖与平凡函数依赖: • 若X Y,并且 Y X ,称X Y为非平凡函数依赖。 • 若X Y,并且Y X ,称X Y为平凡函数依赖。 • 完全函数依赖与部分函数依赖: 关系模式R(U)中,若X Y,并且对X的任何一个真子集X’,都有 X’ Y ,则称Y完全函数依赖于X ,记作 X Y 若X Y,但Y不完全依赖于X,则称Y部分函数依赖于X,记作 X Y p f
传递函数依赖: 关系模式R(U)中,若X Y,Y Z,并且 Y X ,Y X ,则称Z传递函数依赖于X 。 例1关系Student(Sno,Sname,Ssex,Sage,Sdept)中,有 Sno Ssex ,Sno Sdept ,Sno Sname(无重名) Ssex Sage 例2关系Std(Sno, Sdept,Mname)中,有 Sno Sdept , Sdept Mname, Sno Mname 传递 例3关系SC(Sno, Cno,Grade)中,有 Sno Grade, Cno Grade, (Sno,Cno) Grade f • 举例:
码(key): 设K为关系模式R(U,F)中的属性或属性组合。若K U,则称K为R的一个候选码(candidate key)。 f • 主属性(Prime attribute): • 包含在任何一个候选码中的属性 • 非主属性(Nonprime attribute): 不包含在任何码中的属性,也称非码属性(Non-key attribute) 全码(All-key)的一个例子: 关系模式 R(P,W,A) P:演奏者 W:作品 A:听众
范 式 • 范式是符合某一种级别的关系模式的集合。 • 1971-1972 , E.F. Codd 1NF,2NF,3NF • 1974 , Codd和Boyce , BCNF • 1976, Fagin ,4NF • 5NF 1NF 2NF 3NF BCNF 4NF 5NF
Sdept Sno Grade Cno Sloc • 第一范式(1NF) 若关系模式R的所有属性都是不可分的基本数据项,则R1NF。 Why?Sdept和Sloc对码的部分依赖 数据冗余太大 某学生的Sdept和Sloc出现的次数和该学生选课总数相同 删除异常 删除某学生的最后一门选修记录,会删除该学生的相关信息 • 并非所有满足1NF的模式都是“好”的关系模式 。 SLC (Sno, Sdept , Sloc, Cno, Grade) 插入异常 无法插入一个尚未选课的学生信息
Sno Sdept Sdept Sno Sno Grade Sdept Sno Grade Cno Sloc Sloc Cno Sloc (a) SC(Sno,Cno,Grade) (b) SL(Sno,Sdept,Sloc) 1NF 一定程度上解决了“异常”问题 投影分解 2NF
第二范式(1NF) 若关系模式R 1NF ,并且每一个非主属性都完全函数依赖于R的码,则R2NF。 • 2NF是在1NF上消除了可能存在的非主属性对码的部分依赖。 如 投影分解得到的 SL(Sno,Sdept,Sloc) • 若R1NF 且(所有候选)码只有一个属性,则R2NF 。
Sno Sdept Sno Grade Cno Sloc (a) SC(Sno,Cno,Grade) (b) SL(Sno,Sdept,Sloc) Sno Sdept Sdept Sloc (a) SD(Sno,Sdept) (b) DL(Sdept,Sloc) 2NF 投影分解 3NF 插入异常 无法插入一个尚未招生的系 删除异常 删除某系全部学生,则会删除该系信息 数据冗余大 某系的住处Sloc重复次数和该系学生数相同 Why? 存在非主属性对码的传递函数依赖(Sloc传递依赖于Sno)
第三范式(3NF) 若关系模式R(U,F)中不存在候选码X、属性组Y以及非主属性Z(Z Y),使得XY,Y Z和Y X成立,则R3NF。 • 若R3NF,则R的每个非主属性既不部分依赖于候选码,也不传递依赖于候选码。(why?请自证) • 3NF就是不允许存在这样的非平凡函数依赖XY,其中X不包含码,Y是非主属性。
候选码 候选码 S S T J J T 关系模式 STJ (S , T, J ) S:学生 T:教师 J:课程 S T T J (a) ST(S,T) (b) TJ ( T, J ) 3NF 投影分解 数据冗余大 某教师的教课J重复次数和选该课学生数相同 BCNF 删除异常 删除某门课的全部学生会删除教师开课信息 插入异常 无法插入一个尚未选课的学生 Why? 存在主属性对码的部分函数依赖: J部分函数依赖于(S,T)
BC范式(BCNF) 设关系模式R 1NF ,如果对于R的每个非平凡函数依赖XY,则X必含有候选码,那么RBCNF。 反证:若存在部分函数依赖,则候选码的真子集中含有候选码 ->矛盾! • 也即,在R(U,F)中,如果每一个决定因素都包含候选码,则 R BCNF 。 反证:若存在完全函数依赖,则此非码属性组含有候选码 ,又此候选码必为此非码属性组的真子集,所以是部分函数->矛盾! • BCNF关系模式的性质 • 所有非主属性都完全函数依赖于每个候选码; • 所有主属性都完全函数依赖于每个不包含它的候选码; • 没有任何属性完全函数依赖于非码的任何一组属性。
反证: 设X为唯一候选码,若有一个非平凡函数依赖Y Z的决定因素Y中不含候选码,则有XY, Y Z ,且Y X->与3NF定义矛盾! • 若R BCNF,则R中不存在任何属性传递依赖或部分依赖于任何候选码。 反证:若存在传递依赖 XY, Y Z,则X,Y中都含有候选码,得Y X .矛盾! • 若R 3NF, R未必属于 BCNF 。 如 前例 STJ(S,T, J) • 若R 3NF, 且R只有一个候选码,则 R BCNF 。
例1关系 Student(Sno,Sname,Ssex,Sage,Sdept)中,有 Sno Ssex ,Sno Sdept ,Sno Sname (有重名) Ssex Sage , Sno是唯一的码和唯一的决定因素 Student BCNF 例3关系SC(Sno, Cno,Grade)中,有 Sno Grade, Cno Grade, (Sno,Cno) Grade (Sno,Cno)是唯一的码和唯一的决定因素 SC BCNF f • 举例: 例2关系Course(Cno, Cname,Cpno,Ccredit)中,有 Cno Cpno , Cno Ccredit, Cno Cname(无重名) Cname Cpno , Cname Ccredit Cno和Cname为两个互不相交的单属性码,无其他决定因素 Course BCNF 例4 关系模式SJP(S, J,P)中,S表示学生,J表示课程,P表示名次。有 (S,J) P, (J, P) S, (S,J)和 (J, P) 是候选码,且相交。且无其他决定因素 SJP BCNF
4.3 关系模式的规范化 • 规范化:一个低一级范式的关系模式通过模式分解转换为若干个高一级范式的关系模式的集合的过程。 • 关系模式规范化的步骤: 概念的单一化 ——“一事一地”原则 • 并非规范化程度越高的关系模式越好 • —— 要根据实际情况确定
定义:关系模式R(U,F)的一个分解是指 ={ R1 (U1,F1) , R2 (U2,F2) , …. , Rn (Un,Fn) } 其中U= ,且没有UiUj , Fi为F在Ui上的投影。 关系模式的分解 “无损连接性”和“保持函数依赖”是两个独立的标准 • 模式分解后产生的模式应与原模式等价 • 等价的三种标准(定义) • 分解要具有“无损连接性(lossless join)” • 分解要“保持函数依赖(preserve dependency)” • 分解既要“保持函数依赖”,又要具有“无损连接性”
Sdept Sno 分解一 Sno Sloc Sdept Sloc SL(Sno,Sdept,Sloc) 无法查询某学生的系别和住址 --信息丢失!
Sdept Sno Sloc SL(Sno,Sdept,Sloc) 分解二 Sno Sdept Sloc Sloc NL(Sno,Sloc) DL(Sdept,Sloc) 若Sno所在Sloc有其他(X)系学生,则自然连接结果中会多出“Sno属于X系”的元组 --信息丢失!
Sdept Sno Sloc SL(Sno,Sdept,Sloc) 分解三 Sno Sno Sdept Sloc ND(Sno,Sdept) NL(Sno,Sloc) • 自然连接结果同SL相同 • --无损连接性! • 丢失SdeptSloc,存在更新异常--没有保持函数依赖
Sdept Sno Sloc SL(Sno,Sdept,Sloc) 分解四 Sno Sdept Sdept Sloc ND(Sno,Sdept) DL(Sdept,Sloc) 同时满足无损连接性和保持函数依赖!
关于模式分解的几个重要事实: • 若要求分解保持函数依赖,那么模式分解总可以达到3NF, 但不定能达到BCNF; • 若要求分解既保持函数依赖,又具有无损连接性,一定能 达到3NF,但不一定能达到BCNF; • 若要求分解具有无损连接性,那么模式分解总可以达到 4NF。