21/7/31 数据依赖的公理系统与模式分解的具体要求(不包含模式分解的具体算法)
21/7/31 读书笔记
数据库系统概论 数据依赖的公理系统
上节说到,数据依赖包括函数依赖和多值依赖,其中函数依赖可以看做多值依赖的一种特殊情况。
Armstrong公理系统与相关符号定义
我们首先讨论函数依赖下的一个有效的公理系统——Armstrong公理系统:
蕴涵:对关系模式R(U,F),如果对任何一个关系r,函数依赖\(X\to Y\)均成立,则认为F蕴涵了\(X\to Y\)。其中F是一组函数依赖。
Armstrong公理系统的三大公理是:
- 自反律:\(Y\subseteq X \subseteq U\),则\(X\to Y\)被F蕴涵。
- 增广律:如果\(X\to Y\)被F蕴涵,且\(Z \subseteq U\),那么\(X\bigcup Z\to Y \bigcup Z\)。
- 传递律:如果\(X\to Y\)且\(Y\to Z\)被F蕴涵,则\(X\to Z\)被F蕴涵。
闭包:其一,在R<U,F>下被F所蕴涵的所有函数依赖的全体构成的集合称为F的闭包,记为F+;其二,对\(X\subseteq U\),我们称\(X_F^+=\{A|A是单一属性\and X\to A可以由Armstrong公理导出\}\)是属性集X关于函数依赖集F的闭包。
\(X\to Y\)是否属于F的闭包F+ 相当于 判定一个函数依赖\(X\to Y\)是否能够从F中根据Armstrong公理导出 相当于 判定Y是否属于属性集X关于函数依赖集F的闭包\(X_F^+\)
因此我们需要求出\(X_F^+\),其算法依赖于自反律和传递律:
- 令\(X^0\)=X。这一步相当于根据自反律得到\(X^+_F\)最小包含的属性集合。
- 求出\(B=\{A|V\subseteq U 且 V\to W \in F且A\in W\}\)。这一步相当于根据传递律求出\(X^+_F\)这一次可包含的属性集合。
- 令\(X^{i+1}=X^i\bigcup B\)
- 若\(X^i=U\)或\(X^{i+1}=X^i\),则结束。
- 否则重复2、3步。
可以由数学证明Armstrong公理的有效性和完备性:
- 有效性:从F出发根据Armstrong公理推导出的每个函数依赖都存在于F+中。
- 完备性:F+中的每个函数依赖必定可以从F出发根据Armstrong公理推导出来。
这两个性质说明了,(F蕴涵\(X\to Y\))与(从F根据Armstrong公理导出\(X\to Y\))这两种表述是等价的。
覆盖:其一,如果\(G^+=F^+\),那么我们认为函数依赖集F覆盖了G,或者也可以说函数依赖集G覆盖了F;其二,如果一个函数依赖集F是最小依赖集或最小覆盖,当且仅当F满足下列条件:
- F中任一个函数依赖的右边只有一个属性。
- F中不存在一个函数依赖\(X\to A\),A是单一属性,使得F与\(F-\{X\to A\}\)等价。
- F中不存在一个函数依赖\(X\to A\),A是单一属性,\(Z\subseteq X\),使得F与\((F-\{X\to A\})\bigcup \{Z\to A\}\)等价。
第三个条件主要是约束函数依赖的左边的X应尽可能地简化,以至于不能用X任意一个子集来取代X。
我们可以发现,任何一个函数依赖集F均对应于一个最小依赖集\(F_{min}\)。
判断两个函数依赖集是否相互覆盖:覆盖 iff \(F^+=G^+\) iff \(F^+\subseteq G^+ \and G\subseteq F^+\)
模式分解的具体讨论
上一节中,我们介绍了模式分解,也就是规范化的意义,在于一种不好的关系模式分解为多个更好的关系模式的组合,而利用范式作为关系模式的分离程度的测度。
根据观察问题的方面的不同,模式分解有三种准则:
- 分解具有无损连接性
- 分解需要保持函数依赖
- 分解即应该保持函数依赖且应该具有无损连接性
在模式分解中存在的重要事实是:
- 如果分解仅保持函数依赖,则分解程度能够达到3NF,但是不一定到达BCNF
- 如果分解仅要求具有无损连接性,则分解程度一定具有4NF
- 如果分解要求保持函数依赖的同时具有无损连接性,则可以达到3NF,但是不一定到达BCNF
具体各个准则下对应的模式分解算法细节可以参考书p198~201页。
无损连接性
无损连接性描述了一个分解是否能够(通过连接)无损复原出原模式中的信息。
对关系模式\(R<U,F>\),我们称\(\rho=\{R_1<U_1,F_1>,R_2<U_2,F_2>...\}\)是\(R<U,F>\)的一种分解。对\(R<U,F>\)上的一个关系\(r\),我们定义\(m_\rho(r)=\Join\pi_{R_i}(r)\),即作为\(r\)在\(\rho\)中各个关系模式上的投影的连接,其中令\(r\)在各个关系模式上的投影\(\pi_{R_i}(r)=\{t[U_i]|t\in r\}=r_i\),则以下关系恒成立:
- \(r\subseteq m_\rho(r)\)
- \(\pi_{R_i}(m_\rho(r))=r_i=\pi_{R_i}(r)\)
- \(m_\rho(m_\rho(r))=m_\rho(r)\)
我们认为当对于任何一个关系\(r\)均存在\(r=m_\rho(r)\)时,分解\(\rho\)具有无损连接性。
更实用地,我们将一个关系模式R分解为两个关系模式\(R_1\)和\(R_2\),若\(((U_1\bigcap U_2)\to (U_1-U_2))\in F^+\)或者\(((U_1\bigcap U_2)\to (U_2-U_1))\in F^+\),则该分解具有无损连接性。
保持函数依赖
保持函数依赖要求原模式中的函数依赖关系不因为分解而被破坏。
对\(\rho=\{R_1<U_1,F_1>,R_2<U_2,F_2>...\}\)是\(R<U,F>\)的一种分解,如果:
则认为分解\(\rho\)保持了函数依赖性。故该问题转化为判断两个函数依赖集是否相互覆盖的问题。

浙公网安备 33010602011771号