-
函数依赖(functional dependency,FD)
- 设 R ( U ) R(U) R(U) 是 属性集 U U U 上的一个 关系模式, X , Y X,Y X,Y 是 U U U 的子集.若对于 R ( U ) R(U) R(U) 的任意一个可能的 关系 r r r, r r r 中任意两个元组 t , s t,s t,s,若 t [ X ] = s [ X ] t[X]=s[X] t[X]=s[X],则 t [ Y ] = s [ Y ] t[Y]=s[Y] t[Y]=s[Y],则称 X X X 函数确定 Y Y Y(或 Y Y Y 函数依赖于 X X X),记作 X → Y X\to Y X→Y,其中 X X X 也称作 决定因素(determinant).特别地,如果
-
- X → Y X\to Y X→Y,且 X ⊉ Y X\not\supe Y X⊇Y,则称 X → Y X\to Y X→Y 是非平凡的函数依赖(non-trivial functional dependence),无歧义时简称函数依赖;
-
- X → Y X\to Y X→Y,且 X ⊇ Y X\supe Y X⊇Y,则称 X → Y X\to Y X→Y 是平凡的函数依赖(trivial functional dependence);
-
函数依赖实际上是特殊的多值依赖,也叫映射依赖、单值依赖(single-valued dependency,SVD),也就是常说的多对一(many-to-one)。这里的函数依赖和别的数据依赖(比如连接依赖)一样都是语义范畴的概念,只能根据语义来确定一个函数依赖。例如,
姓名
→ \to →年龄
这个函数依赖只有在该部门没有同名人的条件下成立,如果允许有同名人,则年龄
就不再函数依赖于姓名
了。 -
另外,如果有 X → Y X\to Y X→Y 且 Y → X Y\to X Y→X,那么可以记为 X ↔ Y X\leftrightarrow Y X↔Y,也就是常说的一对一(one-to-one)或一一映射。
完全函数依赖(full functional dependency,FFD)
- 设 R ( U ) R(U) R(U) 是 属性集 U U U 上的一个 关系模式, X , Y X,Y X,Y 是 U U U 的子集.若 X → Y X\to Y X→Y,并且对于 X X X 的任何一个真子集 X ′ X' X′,都有 X ′ ↛ Y X'\not\to Y X′→Y,则称 Y Y Y 对 X X X 完全函数依赖,记作 X → F Y X\xrightarrow{F} Y XFY.若 X → Y X\to Y X→Y,但 Y Y Y 不完全函数依赖于 X X X,则称 Y Y Y 对 X X X 部分函数依赖,记作 X → P Y X\xrightarrow{P} Y XPY.
-
显然,属性全集一定完全依赖于候选键(或主键),但单个或部分属性却不一定。该定义可以用来判断一个关系模式是否满足第二范式。
传递函数依赖(transitive functional dependency,TFD)
- 设 R ( U ) R(U) R(U) 是 属性集 U U U 上的一个 关系模式, X , Y , Z X,Y,Z X,Y,Z 是 U U U 的子集.若 X → Y ( X ⊉ Y ) , Y → Z ( Y ⊉ Z ) X\to Y\,(X\not\supe Y),\enspace Y\to Z\,(Y\not\supe Z) X→Y(X⊇Y),Y→Z(Y⊇Z),则称 Z Z Z 对 X X X 传递函数依赖,记作 X → T Z X\xrightarrow{T} Z XTZ.
-
有些教材中的定义可能会添加条件“ Y ↛ X Y\not\to X Y→X”,理由是“ X ↔ Y X\leftrightarrow Y X↔Y”就导致结果直接是“ X → Z X\to Z X→Z”了,不过这属于推导的(含于 F + F^+ F+ 中)而不是 F F F 所原生包含的。
多值依赖(multi-valued dependency,MVD)
- 设 R ( U ) R(U) R(U) 是 属性集 U U U 上的一个 关系模式, X , Y , Z X,Y,Z X,Y,Z 是 U U U 的子集,并且 Z = U − ( X ∪ Y ) Z=U-(X\cup Y) Z=U−(X∪Y).若对于 R ( U ) R(U) R(U) 的任意一个可能的 关系 r r r,对任何的 u , v ∈ r u,v\in r u,v∈r,只要 u [ X ] = v [ X ] u[X]=v[X] u[X]=v[X],就有 w 1 , w 2 ∈ r w_1,w_2\in r w1,w2∈r 满足:
-
- w 1 [ X ] = w 2 [ X ] = u [ X ] = v [ X ] w_1[X]=w_2[X]=u[X]=v[X] w1[X]=w2[X]=u[X]=v[X]
-
- w 1 [ Y ] = u [ Y ] w_1[Y]=u[Y] w1[Y]=u[Y] 且 w 1 [ Z ] = v [ Z ] w_1[Z]=v[Z] w1[Z]=v[Z]
-
- w 2 [ Y ] = v [ Y ] w_2[Y]=v[Y] w2[Y]=v[Y] 且 w 2 [ Z ] = u [ Z ] w_2[Z]=u[Z] w2[Z]=u[Z]
- 则称 X X X 多值地决定 Y Y Y(或 Y Y Y 多值依赖于 X X X),记作 X ↠ Y X\twoheadrightarrow Y X↠Y,其中 X X X 也称作 决定因素(determinant).特别地,如果 Z = ∅ Z=\varnothing Z=∅,则称 X ↠ Y X\twoheadrightarrow Y X↠Y 是 平凡的多值依赖(trivial multi-valued dependency).
-
定义中条件的意思是 u , v u,v u,v 交换 Y Y Y 分量后(得到的 w 1 , w 2 w_1,w_2 w1,w2)依然均属于 r r r,也可以通俗地写成“给定一对 ( x , z ) (x,z) (x,z) 值,对应的一组可能的 Y Y Y 的值只取决于 x x x 而与 z z z 无关”。
-
多值依赖也就是常说的多对多(many-to-many),定义中“一组可能的 Y Y Y 的值”可以是单个值(比如 y y y),那么这种情况就是函数依赖(多对一)了,即若 X → Y X\to Y X→Y 则 X ↠ Y X\twoheadrightarrow Y X↠Y;因此为进行区分,对于非函数依赖的多值依赖,可称为严格多值依赖。除此之外,多值依赖还有以下性质:
-
- 多值依赖具有对称性:若 X ↠ Y X\twoheadrightarrow Y X↠Y,则 X ↠ Z X\twoheadrightarrow Z X↠Z,其中 Z = U − ( X ∪ Y ) Z=U-(X\cup Y) Z=U−(X∪Y).
-
- 多值依赖具有传递性:若有 X ↠ Y X\twoheadrightarrow Y X↠Y 和 Y ↠ Z Y\twoheadrightarrow Z Y↠Z,则 X ↠ Y − Z X\twoheadrightarrow Y-Z X↠Y−Z.
-
平凡多值依赖的最简单的例子就是仅由两个属性构成的多对多的关系模式,比如
R(StudentId, ProjectId)
(一个学生可以参与多个项目,参考〖第二范式(2NF)〗中的例子)。多值依赖可以用来判断一个关系模式是否满足第四范式。
定理一
- 设 R ( U , D ) R(U,D) R(U,D) 是 属性集 U U U 上的一个 关系模式,其中 D D D 为 R R R 中 函数依赖和 多值依赖的集合, X , Y X,Y X,Y 是 U U U 的子集.那么 X ↠ Y X\twoheadrightarrow Y X↠Y 成立的充要条件是: R R R 的 分解 ρ = { R 1 ( X ∪ Y , D 1 ) , R 2 ( X ∪ ( U − Y ) , D 2 ) } \rho=\{R_1(X\cup Y, D_1),\,R_2(X\cup (U-Y), D_2)\} ρ={R1(X∪Y,D1),R2(X∪(U−Y),D2)} 是 无损连接分解.
-
该定理将多值依赖与无损连接分解联系在了一起,这提供了一个对存在多值依赖的关系模式进行无损连接分解的方法,可用于向 4NF 转化(见〖关系模式的 4NF 规范化(分解法)〗)。
连接依赖(join dependency,JD)
- 设 ρ = { R 1 ( U 1 , F 1 ) , ⋯ , R k ( U k , F k ) } \rho=\{R_1(U_1,F_1),\cdots,R_k(U_k,F_k)\} ρ={R1(U1,F1),⋯,Rk(Uk,Fk)} 是 关系模式 R ( U , F ) R(U,F) R(U,F) 的一个分解,若对 R ( U , F ) R(U,F) R(U,F) 的任何一个关系 r r r 均有 r = m ρ ( r ) = ⋈ i = 1 k π R i ( r ) , 其中 π R i ( r ) = { t [ U i ] ∣ t ∈ r } r=m_\rho(r)=\bowtie_{i=1}^k\pi_{R_i}(r),\quad 其中\,\pi_{R_i}(r)=\{t[U_i]\mid t\in r\} r=mρ(r)=⋈i=1kπRi(r),其中πRi(r)={t[Ui]∣t∈r}成立,则称 分解 ρ \rho ρ 具有 无损连接性(lossless join),记 ⋈ [ ρ ] \bowtie[\rho] ⋈[ρ] 或 ⋈ [ R 1 , ⋯ , R n ] \bowtie[R_1,\cdots,R_n] ⋈[R1,⋯,Rn] 为 R R R 上的一个 全连接依赖(complete join dependency),或简称 连接依赖.
-
与之相对的,还有嵌入的连接依赖(embedded join dependency),即 U 1 ∪ ⋯ ∪ U k ⊆ U U_1\cup\cdots\cup U_k\sube U U1∪⋯∪Uk⊆U 的情况。实际上,多值依赖按无损连接分解后,就构成上述 k = 2 k=2 k=2 时(即分解的子模式个数为 2)的连接依赖,也叫做二目连接依赖。
参考文献/文章
- 《数据库系统概论(第5版)》“十二五”高教版