关系模式回顾
关系模式由五部分组成,是一个五元组:
- R(U, D, DOM, F)
- 关系名R是符号化的元组语义
- U为一组属性
- D为属性组U中的属性所来自的域
- DOM为属性到域的映射
- F为属性组U上的一组数据依赖
一些关系模式中可能存在的问题
- 数据冗余
浪费大量的存储空间
- 更新异常
数据冗余 ,更新数据时,维护数据完整性代价大。
- 插入异常
- 删除异常
然而,一个好的模式不应该发生插入异常、删除异常和更新异常,数据冗余应尽可能少。
产生上述问题的原因:由存在于模式中的某些数据依赖引起的。
解决方法:用规范化理论改造关系模式来消除其中不合适的数据依赖
规范化
数据依赖
-
函数依赖
- 设R(U)是一个属性集U上的关系模式,X和Y是U的子集。若对于R(U)的任意一个可能的关系r,r 中不可能存在两个元组在X上的属性值相等, 而在Y上的属性值不等, 则称“X函数确定Y”或“Y函数依赖于X”,记作X→Y。(X称为这个函数依赖的决定因素)
- 若X→Y,并且Y→X, 则记为X←→Y。 若Y不函数依赖于X, 则记为X→\Y。(\在→上)
- 函数依赖不是指关系模式R的某个或某些关系实例满足的约束条件,而是指R的所有关系实例均要满足的约束条件
- X→Y,但Y⊈X则称X→Y是非平凡的函数依赖。
- X→Y,但Y⊆X 则称X→Y是平凡的函数依赖。
- 在R(U)中,如果X→Y,并且对于X的任何一个真子集X’, 都有 X’ ↛ Y, 则称Y对X完全函数依赖,记作XF→ Y。 若X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖,记作XP→ Y.(F、P都在→上)
- 在R(U)中,如果X→Y(Y⊈X),Y↛X,Y→Z,Z⊈Y, 则称Z对X传递函数依赖。记为:X 传递→ Z。
eg:
(1) 描述一个学生关系,可以有学号、姓名、系名等属性。
一个学号只对应一个学生,一个学生只在一个系中学习 “学号”值确定后,学生的姓名及所在系的值就被唯一确定。 Sname=f(Sno),Sdept=f(Sno)
即Sno函数决定Sname
Sno函数决定Sdept
记作Sno→Sname,Sno→Sdept
-
多值依赖
- 设R(U)是属性集U上的一个关系模式。
- X,Y,Z是U的子集,并且Z=U-X-Y。
- 关系模式R(U)中多值依赖X→→Y成立,当且仅当对R(U)的任一关系r,给定的一对(x,z)值,有一组Y的值,这组值仅仅决定于x值而与z值无关。
平凡多值依赖和非平凡的多值依赖
- 若X→→Y,而Z=Ф,即Z为空,则称X→→Y为平凡的多值依赖。
- 否则称X→→Y为非平凡的多值依赖。
多值依赖具有对称性。
- 即若X→→Y,则X→→Z,其中Z=U-X-Y
多值依赖具有传递性。
即若X→→Y,Y→→Z, 则 X→→Z -Y。
函数依赖是多值依赖的特殊情况。
- 若X→Y,则 X→→Y。
- 若X→→Y,X→→Z,则X→→YZ。
- 若X→→Y,X→→Z,则X→→Y∩Z。
- 若X→→Y,X→→Z,则X→→Y-Z,X→→Z -Y。
-
码(唯一标识实体的属性集)主码 候选码 码
- 设K为R<U,F>中的属性或属性组合。若U完全函数依赖K,则称K为R的一个候选码。
- 如果U部分函数依赖于K,则K称为超码。候选码是最小的超码,即K的任意一个真子集都不是候选码。
- 若关系模式R有多个候选码,则选定其中的一个做为主码(Primary key)。
- 包含在任何一个候选码中的属性 ,称为主属性
- 不包含在任何码中的属性称为非主属性
- 整个属性组是码,称为全码
- 关系模式 R中属性或属性组X 并非 R的码,但 X 是另一个关系模式的码,则称 X 是R 的外部码,也称外码。(主码与外部码一起提供了表示关系间联系的手段)
范式
范式的种类:1.第一范式(1NF) 2.第二范式(2NF) 3.第三范式(3NF) 4.BC范式(BCNF) 5.第四范式(4NF) 6.第五范式(5NF)
范式之间的联系:
规范化概念:
一个低一级范式的关系模式,通过模式分解,可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化。
- 第一范式(1NF)
每个分量必须是不可分开的数据项。(每个属性不可再分)
- 第二范式(2NF)
若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于任何一个候选码,则R∈2NF。(无部分函数依赖)
- 第三范式(3NF)
设关系模式R<U,F>∈1NF,若R中不存在这样的码X、属性组Y及非主属性Z(Y⊈Z), 使得X→Y,Y→Z成立,Y ↛ X不成立,则称R<U,F> ∈ 3NF。(无非主属性对码的传递函数依赖,可能存在主属性对码的部分函数依赖和传递函数依赖)
- BC范式(BCNF)
- 设关系模式R<U,F>∈1NF,若X →Y且Y⊈X时X必含有码,则R<U,F>∈BCNF。 换言之,在关系模式R<U,F>中,如果每一个决定属性集都包含候选码,则R∈BCNF
- 所有非主属性都完全函数依赖于每个候选码
- 所有主属性都完全函数依赖于每个不包含它的候选码
- 没有任何属性完全函数依赖于非码的任何一组属性
- 如果一个关系数据库中的所有关系模式都属于BCNF,那么在函数依赖范畴内,它已实现了模式的彻底分解,达到了最高的规范化程度,消除了插入异常和删除异常。
- 第四范式(4NF)
- 关系模式R<U,F>∈1NF,如果对于R的每个非平凡多值依赖X→→Y(Y ⊈ X),X都含有码,则R<U,F>∈4NF。
- 4NF就是限制关系模式的属性之间不允许有非平凡且非函数依赖的多值依赖。4NF所允许的非平凡多值依赖实际上是函数依赖。
规范化基本步骤:
不能说规范化程度越高的关系模式就越好。
必须对现实世界的实际情况和用户应用需求作进一步分析,确定一个合适的、能够反映现实世界的模式。
上面的规范化步骤可以在其中任何一步终止。
!!!注意!!!
若要求分解具有无损连接性,那么模式分解一定能够达到4NF。
若要求分解保持函数依赖,那么模式分解一定能够达到3NF,但不一定能够达到BCNF。
若分解既具有无损连接性,又保持函数依赖,则模式分解一定能够达到3NF,但不一定能够达到BCNF。
闭包
在关系模式R<U,F>中为F所逻辑蕴涵的函数依赖的全体叫作F的闭包,记为F +。
求闭包的算法:
eg:已知关系模式R<U, F>,其中U={A, B, C, D, E};F={AB→C, B→D, C→E, EC→B, AC→B}。求(AB)F+ 。
设X(0)=AB。
计算X(1):逐一的扫描F集合中各个函数依赖,找左部为 A、B或AB的函数依赖。得到两个:AB→C,B→D。于是X(1)=AB∪CD=ABCD。
因为X(0)≠ X(1),所以再找出左部为ABCD子集的那些函数 依赖,又得到C→E,AC→B,于是X(2)=X(1)∪BE=ABCDE。
因为X(2)已等于全部属性集合,所以(AB)F+ =ABCDE。
- 如果G+=F+,就说函数依赖集F覆盖G(F是G的覆盖,或G是F的覆盖),或F与G等价。(充分必要条件是F ⊆G+和G⊆ F+ )
- 如果函数依赖集F满足下列条件,则称F为一个极小函数依赖集,亦称为最小依赖集或最小覆盖。
- 最小覆盖例子:
(1)F={A→B, B→A, B→C, A→C, C→A} F的最小依赖集: Fm1= {A→B, B→C, C→A}
(2)U={Sno, Sdept, Mname, Cno, Grade},
F={Sno→Sdept, Sdept→Mname, (Sno,Cno)→Grade} F是最小覆盖
F ' ={Sno→Sdept, Sno→Mname, Sdept→Mname, (Sno,Cno)→Grade, (Sno,Sdept)→Sdept} F '不是最小覆盖
因为:F '- {Sno→Mname} 与 F '等价 F '- {(Sno,Sdept)→Sdept} 也与F '等价
- 每一个函数依赖集F均等价于一个极小函数依赖集Fm。此Fm称为F的最小依赖集。
- F的最小依赖集Fm不一定是唯一的,它与对各函数依赖FDi 及X→A中X各属性的处置顺序有关。