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^+\)​​,其算法依赖于自反律传递律

  1. \(X^0\)​​​=X。这一步相当于根据自反律得到\(X^+_F\)最小包含的属性集合。
  2. 求出\(B=\{A|V\subseteq U 且 V\to W \in F且A\in W\}\)。这一步相当于根据传递律求出\(X^+_F\)这一次可包含的属性集合。
  3. \(X^{i+1}=X^i\bigcup B\)
    1. \(X^i=U\)\(X^{i+1}=X^i\)​,则结束。
    2. 否则重复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^+\)​​

模式分解的具体讨论

上一节中,我们介绍了模式分解,也就是规范化的意义,在于一种不好的关系模式分解为多个更好的关系模式的组合,而利用范式作为关系模式的分离程度的测度。

根据观察问题的方面的不同,模式分解有三种准则:

  • 分解具有无损连接性
  • 分解需要保持函数依赖
  • 分解即应该保持函数依赖且应该具有无损连接性

在模式分解中存在的重要事实是:

  1. 如果分解仅保持函数依赖,则分解程度能够达到3NF,但是不一定到达BCNF
  2. 如果分解仅要求具有无损连接性,则分解程度一定具有4NF
  3. 如果分解要求保持函数依赖的同时具有无损连接性,则可以达到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\)​​,则以下关系恒成立:

  1. \(r\subseteq m_\rho(r)\)
  2. \(\pi_{R_i}(m_\rho(r))=r_i=\pi_{R_i}(r)\)
  3. \(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>\)的一种分解,如果:

\[F^+=\left(\bigcup_{i=1}^k F_i\right)^+ \]

则认为分解\(\rho\)​保持了函数依赖性。故该问题转化为判断两个函数依赖集是否相互覆盖的问题。

posted @ 2021-07-31 11:23  neumy  阅读(305)  评论(0)    收藏  举报