目录
函数依赖
关系模式中的各属性之间相互依赖、相互制约的联系称为数据依赖。数据依赖有函数依赖 、多值依赖。
函数依赖(FD ,Functional Dependency)是关系模式中属性之间的一种逻辑依赖关系。
SCD(SNo,SN,Age,Dept,MN,CNo,Score) SNo确定一个学生,一个学生确定(SN,Age,Dept)
SNo决定函数(SN,Age,Dept) (SN,Age,Dept) 函数依赖SNo
函数依赖的定义:设关系模式R(U,F), U是属性全集,F是U上的函数依赖所构成的集合,X和Y是U的子集,如果对于R(U)的任意一个可能的关系r ,对于X的每一具体值,Y 都有唯一的具体值与之对应,则称X决定函数Y ,或Y函数依赖于X,记作X→Y。我们称X为决定因素, Y为依赖因素。当Y不函数依赖于X 时,记作:X/→Y。当X→Y且Y→X时,则记作:X↔Y。
U={SNo,SN,Age,Dept,MN,CNo,Score}
F={SNo→SN,SNo →Age,SNo→ Dept, (SNo ,CNo)→ Score}
完全函数依赖与部分函数依赖:
设有关系模式R(U),U是属性全集,X和Y是U的子集。
如果 X→ Y ,并且对于 X 的任何一个真子集 X' ,都有 X'/→Y , 则称 Y 对 X 完全函数依赖,记作X→Y(箭头上加 f)
如果对 X 某个真子集 X', 有 X'→Y , 则称 Y 对 X 部分函数依赖,记作 X→Y(箭头上加 p)
[例]关系模式SCD中,因为SNo /→Score,且CNo /→Score,所以有:(SNo,CNo)→ Score (箭头上加 f),而SNo → Age,所以(SNo,CNo) → Age (箭头上加 p)
只有当决定因素是组合属性时,讨论部分函数依赖才有意义;当决定因素是单属性时,只能是完全函数依赖。
传递函数依赖:
设有关系模式 R(U) ,U 是属性全集,X,Y,Z是 U 的子集。
若X→ Y ,但 Y/→X,而Y→Z(Y∉Z,Z∉Y),则称 Z 对 X 传递函数依赖,记作:X → Z (箭头上加 t)。如果 Y→X,则 X↔Y , 这时称 Z对 X 直接函数依赖,而不是传递函数依赖。
关系模式的范式
关系模式存在的问题:
- 数据冗余度太大,浪费存储空间
- 更新异常
- 插入异常,该插入的数据插不进去
- 删除异常,不该删除的数据也删了
产生上面的异常原因是:模式中的某些数据依赖引起的
所以:用规范化理论改造关系模式,消除其中不合适的数据依赖。
第一范式
定义:如果关系模式R所有的属性均为原子属性,即每个属性都是不可再分的,则称R属于第一范式,简称1NF,记作R∈1NF。它所有的属性都为原子属性。
第二范式
定义:如果关系模式R∈1NF,且每个非主属性都完全函数依赖于R的主码,则称R属于第二范式,简称2NF,记作R∈2NF。
从1NF关系中消除非主属性对主码的部分函数依赖,则可得到2NF关系。如果R的主码为单属性,或R的全体属性均为主属性,则R∈2NF。
2NF规范化是指把1NF关系模式通过投影分解,转换成2NF关系模式的集合。
[例]将SCD(SNo,SN,Age,Dept,MN,CNo,Score)规范为2NF。
SD(SNo,SN,Age,Dept,MN) /*主码为SNo*/
SC(SNo,CNo,Score) /*主码为SNo,CNo*/
非主属性对主码完全函数依赖,因此,SD∈2NF, SC∈2NF。
第三范式
定义:如果关系模式R∈2NF,且每个非主属性都不传递函数依赖于R的主码,则称R属于第三范式,简称3NF , 记作 R∈3NF。
[例] SC(SNo,CNo,Score) 函数依赖为(SNo,CNo)→Score,非主属性Score不传递函数依赖于主码(SNo,CNo),因此,SC∈3NF。
[例]SD(SNo,SN,Age,Dept,MN) SNo → Dept 和 Dept → MN 由此SNo → MN (箭头上加 t) 非主属性MN与主码SNo间存在着传递函数依赖,所以SD ∉ 3NF。
纯属个人学习笔记,转载记得附上原文链接
喜欢的小伙伴可以关注点赞收藏三连哦