-
逻辑蕴涵(logical implication)
- 给定 关系模式 R ( U , F ) R(U,F) R(U,F),其任何一个关系 r r r,若 函数依赖 X → Y X\to Y X→Y 都成立,则称 F F F 逻辑蕴涵 X → Y X\to Y X→Y. 闭包(closure)
- 给定 关系模式 R ( U , F ) R(U,F) R(U,F), F F F 逻辑蕴涵的函数依赖的全体叫作 F F F 的 闭包,记为 F + F^+ F+.
-
之所以需要这个定义以及上面逻辑蕴涵的定义,是因为原生的 F F F 一般是按极小化来列出所包含的依赖,而 F + F^+ F+ 还纳入了由 F F F 推导出的所有可能的依赖组合(比如传递函数依赖),这方便后面的推理分析
Armstrong 公理系统(Armstrong’s axioms)
- 设 U U U 为属性组全集, F F F 是 U U U 上的一组 函数依赖,那么 关系模式 R ( U , F ) R(U,F) R(U,F) 具有以下推理规则(inference rules):
-
- 自反律(reflexivity rule):若 Y ⊆ X ⊆ U Y\sube X\sube U Y⊆X⊆U,则 X → Y X\to Y X→Y 为 F F F 所蕴涵.
-
- 增广律(augmentation rule):若 X → Y X\to Y X→Y 为 F F F 所蕴涵,且 Z ⊆ U Z\sube U Z⊆U,则 X ∪ Z → Y ∪ Z X\cup Z\to Y\cup Z X∪Z→Y∪Z 为 F F F 所蕴涵.
-
- 传递律(transitivity rule):若 X → Y X\to Y X→Y 及 Y → Z Y\to Z Y→Z 为 F F F 所蕴涵,则 X → Z X\to Z X→Z 为 F F F 所蕴涵.
-
根据上面的三条规则,可以进一步得到下面三条很有用的推理规则:
-
- 合并规则(union rule):若 X → Y , X → Z X\to Y,\,X\to Z X→Y,X→Z,则 X → Y ∪ Z X\to Y\cup Z X→Y∪Z.
-
- 伪传递规则(pseudo-transitivity rule):若 X → Y , Y ∪ W → Z X\to Y,\,Y\cup W\to Z X→Y,Y∪W→Z,则 X ∪ W → Z X\cup W\to Z X∪W→Z.
-
- 分解规则(decomposition rule):若 X → Y , Y ⊇ Z X\to Y,\,Y\supe Z X→Y,Y⊇Z,则 X → Z X\to Z X→Z.
-
并且可以得到定理: X → A 1 A 2 ⋯ A k X\to A_1A_2\cdots A_k X→A1A2⋯Ak 成立的充分必要条件是 X → A i ( i = 1 , 2 , . . . , k ) X\to A_i\,(i=1,2,...,k) X→Ai(i=1,2,...,k) 成立.
关系模式的分解(decomposition of relational schema)
-
模式分解(decomposition of relational schema)
- 关系模式 R ( U , F ) R(U,F) R(U,F) 的一个分解是指 ρ = { R 1 ( U 1 , F 1 ) , R 2 ( U 2 , F 2 ) , ⋯ , R k ( U k , F k ) } \rho=\{R_1(U_1,F_1),\,R_2(U_2,F_2),\,\cdots,\,R_k(U_k,F_k)\} ρ={R1(U1,F1),R2(U2,F2),⋯,Rk(Uk,Fk)}其中 U = ⋃ i = 1 k U i U=\bigcup_{i=1}^k U_i U=⋃i=1kUi 并且 U i ⊈ U j ( 1 ⩽ i ≠ j ⩽ k ) U_i\not\sube U_j\,(1\leqslant i\neq j\leqslant k) Ui⊆Uj(1⩽i=j⩽k), F i F_i Fi 是 F F F 在 U i U_i Ui 上的投影,即 F i = { X → Y ∣ X → Y ∈ F + , X ∪ Y ⊆ U i } F_i=\{X\to Y\mid X\to Y\in F^+,\, X\cup Y\sube U_i\} Fi={X→Y∣X→Y∈F+,X∪Y⊆Ui}.
-
满足该定义的分解,并不保证原函数依赖还存在于分解后的各子关系模式中,比如若把关系模式
R(Student, Department, Dean)
(Student
是主键)分解成R1(Student, Department)
和R1(Student, Dean)
,丢失了函数依赖Department
→ \to →Dean
。
保持函数依赖的分解(functional dependency preserving decomposition,FDPD)
- 关系模式 R ( U , F ) R(U,F) R(U,F) 的一个 分解 ρ = { 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)} 是 保持函数依赖的(functional dependency preserving,FDP),如果 F + = ( ∪ i = 1 k F i ) + \displaystyle F^+=(\cup_{i=1}^k F_i)^+ F+=(∪i=1kFi)+.
-
例如,把关系模式
R(Student, Department, Dean)
(Student
是主键)分解成R1(Student, Department)
和R1(Department, Dean)
,是保持函数依赖的分解。
具有无损连接性的分解(lossless join decomposition,LJD)
- 设 ρ = { 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),将 ρ \rho ρ 简称为 无损连接分解.
-
其中的 ⋈ \bowtie ⋈ 表示的是自然连接, π R i ( r ) \pi_{R_i}(r) πRi(r) 则是关系 r r r 对应于分解子关系模式 R i ( U i , F i ) R_i(U_i,F_i) Ri(Ui,Fi) 的分解子关系。按前面的例子,把关系模式
R(Student, Department, Dean)
(Student
是主键)分解成R1(Student, Department)
和R1(Student, Dean)
,虽然不是保持函数依赖的分解,但却是无损连接分解。 -
是无损连接分解但不能保持函数依赖的话,虽然这种分解可以无损复原,但数据的更新和插入容易出错,比如上面示例中
Department
和Dean
是分散在两张表中 -
再看一个例子,将关系模式 R ( { S t u d I D , S t u d N a m e , C o u r s e I D , C o u r s e N a m e } , { S t u d I D → S t u d N a m e , C o u r s e I D → C o u r s e N a m e } ) R(\{StudID,StudName,CourseID,CourseName\},\,\{StudID\to StudName,CourseID\to CourseName\}) R({StudID,StudName,CourseID,CourseName},{StudID→StudName,CourseID→CourseName})(
{StudID,CourseID}
为主键)分解成 R 1 ( { S t u d I D , S t u d N a m e } , { S t u d I D → S t u d N a m e } ) R 2 ( { C o u r s e I D , C o u r s e N a m e } , { C o u r s e I D → C o u r s e N a m e } ) R_1(\{StudID,StudName\},\,\{StudID\to StudName\})\\ R_2(\{CourseID,CourseName\},\,\{CourseID\to CourseName\}) R1({StudID,StudName},{StudID→StudName})R2({CourseID,CourseName},{CourseID→CourseName})是保持函数依赖的分解,但却不是无损连接分解,因为 R 1 , R 2 R_1,R2 R1,R2 的自然连接将退化为笛卡尔积(而原关系 r r r 不一定都是笛卡尔积)。(另见〖第三范式(3NF)〗中的示例)
定理一
- 对于 关系模式 R ( U , F ) R(U,F) R(U,F) 的一个分解 ρ = { R 1 ( U 1 , F 1 ) , R 2 ( U 2 , F 2 ) } \rho=\{R_1(U_1,F_1),R_2(U_2,F_2)\} ρ={R1(U1,F1),R2(U2,F2)},如果 U 1 ∩ U 2 → U 1 − U 2 ∈ F + U_1\cap U_2\to U_1-U_2\in F^+ U1∩U2→U1−U2∈F+ 或 U 1 ∩ U 2 → U 2 − U 1 ∈ F + U_1\cap U_2\to U_2-U_1\in F^+ U1∩U2→U2−U1∈F+,则 ρ \rho ρ 具有无损连接性.
-
注意到定理中要求的是“ → \to →”,即函数依赖关系;对于多值依赖的情况,可参见〖多值依赖(multi-valued dependency)〗中的定理。由该定理很直观,并且很容易可以推广到子关系模式为 n n n 个的分解情形。
定理二
- 若 ρ = { 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) 的一个无损连接分解, σ = { S 1 , ⋯ , S m } \sigma=\{S_1,\cdots,S_m\} σ={S1,⋯,Sm} 是 ρ \rho ρ 中 R i ( U i , F i ) R_i(U_i,F_i) Ri(Ui,Fi) 的一个无损连接分解,那么 ρ ′ = { R 1 , ⋯ , R i − 1 , S 1 , ⋯ , S m , R i + 1 , ⋯ , R k } , ρ ′ ′ = { R 1 , ⋯ , R k , R k + 1 , ⋯ , R n } \rho'=\{R_1,\cdots,R_{i-1},\,S_1,\cdots,S_m,\,R_{i+1},\cdots,R_k\},\enspace\rho''=\{R_1,\cdots,R_k,\,R_{k+1},\cdots,R_n\} ρ′={R1,⋯,Ri−1,S1,⋯,Sm,Ri+1,⋯,Rk},ρ′′={R1,⋯,Rk,Rk+1,⋯,Rn}均是 R ( U , F ) R(U,F) R(U,F) 的无损连接分解.
-
其中 ρ ′ \rho' ρ′ 是无损连接分解是显而易见的, ρ ′ ′ \rho'' ρ′′ 的暂未明白什么意思(有时间再研究),总之二者都是可以证明成立的,该定理是分解法规范化的基础。