函数依赖的公理系统

这一章,重要的是几个关系求解算法,这个要会去求。

每个算法做好整理记录。

基本定义

{ X → Y , Y → Z } ⊨ X → Z \{X→Y,Y→Z\}⊨ X→Z {XYYZ}XZ 其中: ⊨表示逻辑蕴涵。

定义6.6(逻辑蕴涵):设F是由关系模式R(U)满足的一个函数依赖集,X→Y是R的一个函数依赖,且不包含在F,如果满足F中所有函数依赖的任一具体关系r,也满足 X → Y X→Y XY,则称函数依赖集F逻辑地蕴涵函数依赖X→Y,或称X→Y可从F推出。可表示为: F ⊨ X → Y F⊨X→Y FXY

定义6.7:函数依赖集F所逻辑蕴涵的函数依赖的全体称为为F的闭包(Closure),记为 F + F^+ F+,即 F + = { X → Y | F ⊨ X → Y } F^+=\{X→Y|F⊨X→Y\} F+{XYFXY}

Armstrong公理系统

基本规则

A1:自反律(Reflexivity) 如果Y X,则X→Y成立,这是一个平凡函数依赖。

根据A1可以推出X→Ф、U→X等平凡函数依赖(因为 ϕ ⊆ X ⊆ U \phi \subseteq X \subseteq U ϕXU)。

A2:增广律(Augmentation)
如果X→Y,且 Z ⊆ W Z \subseteq W ZW,则XW→YZ成立。

A3:传递律(Transitivity)
如果X→Y且Y→Z,则X→Z成立。

推论

推论1:合并规则(The Union Rule)
{ X → Y , X → Z } ⊨ X → Y Z {X→Y,X→Z}⊨ X→YZ XYXZXYZ

推论2:分解规则(The Decomposition Rule)
如 果 X → Y , Z ⊆ Y , 则 X → Z 成 立 如果X\to Y,Z\subseteq Y,则X→Z成立 XYZYXZ

推论3:伪传递规则(The Pseudo Transitivity Rule)
${X→Y,WY→Z}⊨ XW→Z $

定理6.1:若 A i ( i = 1 , 2 , … , n ) A_i(i=1,2,…,n) Ai(i=12,n)是关系模式R的属性,则 X → ( A 1 , A 2 , … , A n ) X→(A_1,A_2,…,A_n) X(A1A2,An)成立的充分必要条件是X→Ai均成立。

属性集闭包

设有关系模式R(U),U={ A1,A2,…,An},X是U的子集,F是U上的一个函数依赖集,则属性集X关于函数依赖集F的闭包 X F + X_F^+ XF+定义为:

$ X_F^+={Ai{|}Ai∈U,且X→Ai可用Armstrong从F推出}$

简而言之,就是一个属性集,在一个依赖集上,所能推导出的所有的属性,就是这个属性集在依赖集上的闭包。

求闭包

递推算法:

  • (1) 令 X ( 0 ) = X , i = 0 X(0)=X,i=0 X(0)=Xi0

  • (2) 求属性集KaTeX parse error: Undefined control sequence: \and at position 47: …)V \to W \in F \̲a̲n̲d̲ ̲V \subseteq X^{…

  • (3) X ( i + 1 ) = X ( i ) ∪ B X^{(i+1)}=X^{(i)} ∪B X(i+1)X(i)B

  • (4)判断 X ( i + 1 ) = X ( i ) X^{(i+1)}= X^{(i)} X(i+1)=X(i)吗?

  • (4)若 X ( i + 1 ) ≠ X ( i ) X^{(i+1)} \not= X^{(i)} X(i+1)=X(i),则用 i + 1   r e p l a c e   i i+1 \space {replace} \space i i+1 replace i,返回(2)

  • (5)若 X ( i + 1 ) = X ( i ) X^{(i+1)} = X^{(i)} X(i+1)=X(i),则 X F + = X ( i ) X_F^+=X^{(i)} XF+=X(i),结束

总结

实际上就是就是我们有个原始集 X X X,对于原始集,我们在依赖集上找关于属性集能够推导的。

一次使用一个依赖, X X X扩充一点,直到完成。

函数依赖的等价与覆盖

最小依赖集合

引理6.1:设G是一个函数依赖集,且其中所有依赖的右部都只有一个属性,则G覆盖任一左部与G(左部)相同的函数依赖集。

一个函数依赖集F可能有若干个与其等价的函数依赖集,我们可以从中选择一个较好以便应用的函数依赖集。

标准至少是:

所有函数依赖均独立,即该函数依赖集中不存在这样的函数依赖,它可由这个集合中的别的函数依赖推导出来

表示最简单,即每个函数依赖的右部为单个属性,左部最简单(必须完全依赖)

定义6.10(最小函数依赖集):函数依赖集F如果满足下列条件,则称F为最小函数覆盖,记为Fmin

  • (1) F中每一个函数依赖的右部都是单个属性。右部最简单

  • (2) 对F中任一函数依赖X→A,F-{X→A}都不与F等价

    • (A只能依赖于一整个属性集,也就是只有一个 X → A X \to A XA没有冗余的函数依赖
  • (3) 对于F中的任一函数依赖X→A, {F-{X→A}}∪{Z→A}都不与F等价,其中Z为X的任一真子集。

    • 左部要最简单,左部的子集不能代替左部

总结一下:

  1. 右部最简单
  2. 左部最简单
    1. 注意左右最简单的不同
  3. 无冗余依赖

候选关键字的选取

先回忆一下什么是码:

k → a b s U k \to^ {abs} U kabsU

属性元组完全依赖于码


给定一个关系模式R(U,F),U={A1,A2,…An},F是R的函数依赖集,那么,可以见属性分为如下四类:

  • L:仅出现在函数依赖集F左部的属性
  • R:仅出现在函数依赖集F右部的属性
  • LR:在函数依赖集F左右部都出现的属性
  • NLR:在函数依赖集 F左右部都未出现的属性

求候选码的规则

  • (1)如果有属性不在函数依赖集中出现,那么它必须包含在候选码中
  • (2)如果有属性不在函数依赖集中任何函数依赖的右边出现,那么它必须包含在候选码中
  • (3)如果有属性只在函数依赖集的左边出现,则该属性一定包含在候选码中
  • (4)如果有属性或属性组能唯一标识元组,则它就是候选码(检验结果)

结果为3NF的依赖保持分解

不用掌握???

回忆一下什么是保持依赖:

也就是分解之后,依赖没有减少

无损:

也就是拼接之后,可以还原

一个分解为两个,它的交集函数依赖(不是依赖于)它的差集,则无损。

思考一下,交集表示的是公共部分,如果公共部分能够决定各自私有部分,那么必定自然拼接后可以复原。

结果为3NF且具有依赖保持和连接不失真的分解

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐