数据库学习笔记(九)

本章理论性较强,晦涩难懂部分本人已做简单叙述,如有理解不到位之处,还请指出,谢谢

一.数据库规范性设计

为了避免数据库一致性问题,因此需要进行数据库规范性设计。需要满足三大理论:

  • 数据依赖理论
  • 关系范式理论
  • 模式分解理论

二.函数依赖

函数依赖

定义:R(U)是属性集合U=\{A_1,A_2,...,A_n\}上的一个关系模式,X,Y 是 U上两个子集,若R(U)的任意一个可能的关系rr中不可能有两个元组满足在X中属性值相等而在Y中属性值不等,则称函数X决定Y,或函数Y依赖于X,记作X\rightarrow Y

再举两个抽象的例子:

函数依赖的特性:

  • X\rightarrow Y,但 Y \nsubseteq X,则称 X\rightarrow Y 为非平凡的函数依赖
  • X\rightarrow Y,任意两个元组,若X上值相等,则Y上值必然相等,称X为决定因素

完全函数依赖与部分函数依赖

  • R(U)中,若X\rightarrow Y并且对X的任何真子集{{X}}'都有{X}' \nrightarrow Y,则称YX完全函数依赖,记作X\stackrel{f}{\longrightarrow}Y
  • 否则称YX部分函数依赖,记作X\stackrel{p}{\longrightarrow}Y

举例

传递函数依赖

定义:在R(U)中,若X\rightarrow YY\rightarrow ZY \nsubseteq XZ \nsubseteq YZ \nsubseteq X, Y不能决定X,则称Z传递函数依赖于X

候选键

定义:KR(U)的属性或属性组合,若K\stackrel{f}{\longrightarrow}Y则称KR(U)上的候选键

说明:

  • 可任选一候选键作为R的主键
  • 包含再任一候选键帐的属性称主属性,其他属性称非主属性
  • 若K是R的一个候选键,K\subsetS,则称S为R一个超键

外键

定义:若R(U)中的属性或属性组合X并非R的候选键,但X却是另一关系的候选键,则称X为R的外来键,简称外键。

逻辑蕴含

定义:设F是关系模式R(U)中的一个函数依赖集合,X,Y是R的属性子集,如果从F中的函数依赖能够推导出X\rightarrow Y,则称X\rightarrow YF的逻辑蕴含,记作F\models X\rightarrow Y

这里简单说明下这个定义,关系模 式R(U)可以抽象成一个表,U表示该表中所有属性集合,F是一个函数依赖集合(比如集合内定义了完全函数依赖,传递函数依赖等),X,Y是表中的某两个属性或属性组,根据F集合中定义的关系可以推导出X\rightarrow Y,则称X\rightarrow YF的逻辑蕴含。比如说如果A,那么B(参照离散数学)

闭包

F逻辑蕴含的所有函数依赖集合称为F的闭包,记作F^+

F^+=F,则说F是一个函数依赖完备集

三.函数依赖的公理和定理

Armstrong公理:

R(U)是属性集U=\{A_1,A_2,...,A_n\}上的一个关系模式,FR(U)的一组函数依赖,记为R(U,F),则有:

  • 自反律:若Y\subseteq X\subseteq U,则X\rightarrow YF逻辑蕴含(表明了一个属性组可以决定它自身的每一个属性)
  • 增广律:若X\rightarrow Y\in F,且Z\subseteq U,则XZ\rightarrow YZF逻辑蕴含(表明了一个函数依赖,两边再加上属性,函数依赖依旧成立)
  • 传递律:若X\rightarrow Y\in F,且Y\rightarrow Z,则X\rightarrow ZF逻辑蕴含

公理的证明:

由Armstrong公理推导出的定理:

  • 合并律:若X\rightarrow YX\rightarrow Z,则X\rightarrow YZ
  • 伪传递律:若X\rightarrow YWY\rightarrow Z,则XW\rightarrow Z
  • 分解律:若X\rightarrow YZ\subseteq Y,则X\rightarrow Z

定理的证明:

引理:如果A_1,A_2,...,A_n是属性,则X\rightarrow A_1,A_2,...,A_n当且仅当对每个A_iX\rightarrow A_i(1\leq i\leqslant n)

属性集闭包

定义:对R(U,F)X\subseteq UU=\{A_1,A_2,...,A_n\},令X_F^+=\{A_i|用Armstrong三个公理可从F导出X\rightarrow A_i \},称X_F^+X关于F的属性闭包

简单地说明一下这个定义的含义:对于一个关系R,可以抽象成一个表,U表示这个表中所有的属性,F是定义在表上的函数蕴含集合,X是表中部分属性组构成的,则X的属性集闭包就表示,由Armstrong公理在函数蕴含集合F上的运用可以推出X决定了R的某些属性,这些属性的集合就是X_F^+。即属性闭包是指所有由X属性(集)决定的属性的集合

由此定义推出重要定理:X\rightarrow Y可从F由Armstrong Axiom导出,当且仅当Y\subseteq X_F^+

定理:有了属性集闭包则可以证明Armstrong Axiom公理是有效的(由F出发根据Armstrong公理推导出的每一个函数依赖一定在F^+)和完备性(被F逻辑蕴含的所有函数依赖都能由公理在F的基础上推出)

覆盖

定义:对R(U)上的两个函数依赖集合FG,如果F^+=G^+,则称F覆盖G,或G覆盖F

引理:F^+=G^+\Leftrightarrow F\subseteq G^+ \wedge G\subseteq F^+

属性闭包计算算法:

以示例简单说明下算法如何进行:

首先,由算法1,X^{(0)}=\{A,B\}。由算法2中,V\subseteq X^{(i)}V\rightarrow W \in F,这时候我们扫描F集合中的依赖关系,其中左边部分要为A,B,AB,所以选择AB\rightarrow CB\rightarrow D,因此W=\{ C,D\},即B=\{ C,D\},由算法3,所以X^{(1)}=\{A,B,C,D\},但此时根据算法4不满足条件,再返回到算法2步骤,此时扫描F集合中左边部分是A,B,C,D任意组合的子集,找到C\rightarrow EAC\rightarrow B,得出B=\{ C,D\},所以X^{(2)}=\{A,B,C,D,E\},不满足条件5(其实这时X^{(2)}已经属于全部集合了,所以可以终止),再根据算法2,找到左边部分是A,B,C,D,E的组合,现在只剩下EC\rightarrow B了,所以无法找到W或者说W\in \o,因此X^{(3)}=\{A,B,C,D,E\},循环中止,此时得到了结果(AB)_F^+=\{A,B,C,D,E\}

此算法的证明不再详述。

由上述的算法得到引理:

每个函数依赖集F可以被一个其右端至多由一个属性的函数依赖集G覆盖。

这个引理的意思表示,假如X\rightarrow Y,这里X,Y都有一个属性或多个属性构成,把Y拆成一个一个属性,那么函数依赖集G就包含了X决定了那些一个一个属性的集合。

 

最小覆盖

F满足一下条件,则称F为最小覆盖:

  • F中的每个函数依赖的右部是单个属性
  • 对任何X\rightarrow A\in F,就有F-\{X\rightarrow A\}不等价于F(这就表示了X\rightarrow A不可以去掉,不确切的类比可以认为这个集合不能去掉)
  • 对任何X\rightarrow A\in FZ\subset X,(F-\{X\rightarrow A\})\cup \{Z\rightarrow A\}(这里比上面多了一个\{Z\rightarrow A\},这其实就表明在原有集合不能去掉的基础之上,又加上了一个限制,就是集合X中没有多余的元素)

由此得到定理:每个函数依赖集F都有等价的最小覆盖{F}'

猜你喜欢

转载自blog.csdn.net/adorkable_thief/article/details/84393924