数据库:函数依赖的公理系统
这一章,重要的是几个关系求解算法,这个要会去求。每个算法做好整理记录。{X→Y,Y→Z}⊨X→Z\{X→Y,Y→Z\}⊨ X→Z{X→Y,Y→Z}⊨X→Z 其中: ⊨表示逻辑蕴涵。定义6.6(逻辑蕴涵):设F是由关系模式R(U)满足的一个函数依赖集,X→Y是R的一个函数依赖,且不包含在F,如果满足F中所有函数依赖的任一具体关系r,也满足X→YX→YX→Y,则称函数依赖集F逻辑地蕴涵函数依赖X→Y,
函数依赖的公理系统
这一章,重要的是几个关系求解算法,这个要会去求。
每个算法做好整理记录。
基本定义
{ X → Y , Y → Z } ⊨ X → Z \{X→Y,Y→Z\}⊨ X→Z {X→Y,Y→Z}⊨X→Z 其中: ⊨表示逻辑蕴涵。
定义6.6(逻辑蕴涵):设F是由关系模式R(U)满足的一个函数依赖集,X→Y是R的一个函数依赖,且不包含在F,如果满足F中所有函数依赖的任一具体关系r,也满足 X → Y X→Y X→Y,则称函数依赖集F逻辑地蕴涵函数依赖X→Y,或称X→Y可从F推出。可表示为: F ⊨ X → Y F⊨X→Y F⊨X→Y
定义6.7:函数依赖集F所逻辑蕴涵的函数依赖的全体称为为F的闭包(Closure),记为 F + F^+ F+,即 F + = { X → Y | F ⊨ X → Y } F^+=\{X→Y|F⊨X→Y\} F+={X→Y|F⊨X→Y}
Armstrong公理系统
基本规则
A1:自反律(Reflexivity) 如果Y X,则X→Y成立,这是一个平凡函数依赖。
根据A1可以推出X→Ф、U→X等平凡函数依赖(因为 ϕ ⊆ X ⊆ U \phi \subseteq X \subseteq U ϕ⊆X⊆U)。
A2:增广律(Augmentation)
如果X→Y,且
Z
⊆
W
Z \subseteq W
Z⊆W,则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
{X→Y,X→Z}⊨X→YZ
推论2:分解规则(The Decomposition Rule)
如
果
X
→
Y
,
Z
⊆
Y
,
则
X
→
Z
成
立
如果X\to Y,Z\subseteq Y,则X→Z成立
如果X→Y,Z⊆Y,则X→Z成立
推论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=1,2,…,n)是关系模式R的属性,则 X → ( A 1 , A 2 , … , A n ) X→(A_1,A_2,…,A_n) X→(A1,A2,…,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)=X,i=0
-
(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 X→A,没有冗余的函数依赖)
-
(3) 对于F中的任一函数依赖X→A, {F-{X→A}}∪{Z→A}都不与F等价,其中Z为X的任一真子集。
- (左部要最简单,左部的子集不能代替左部)
总结一下:
- 右部最简单
- 左部最简单
- 注意左右最简单的不同
- 无冗余依赖
候选关键字的选取
先回忆一下什么是码:
k → a b s U k \to^ {abs} U k→absU
属性元组完全依赖于码
给定一个关系模式R(U,F),U={A1,A2,…An},F是R的函数依赖集,那么,可以见属性分为如下四类:
- L:仅出现在函数依赖集F左部的属性
- R:仅出现在函数依赖集F右部的属性
- LR:在函数依赖集F左右部都出现的属性
- NLR:在函数依赖集 F左右部都未出现的属性
求候选码的规则
- (1)如果有属性不在函数依赖集中出现,那么它必须包含在候选码中
- (2)如果有属性不在函数依赖集中任何函数依赖的右边出现,那么它必须包含在候选码中
- (3)如果有属性只在函数依赖集的左边出现,则该属性一定包含在候选码中
- (4)如果有属性或属性组能唯一标识元组,则它就是候选码(检验结果)
结果为3NF的依赖保持分解
不用掌握???
回忆一下什么是保持依赖:
也就是分解之后,依赖没有减少
无损:
也就是拼接之后,可以还原
一个分解为两个,它的交集函数依赖(不是依赖于)它的差集,则无损。
思考一下,交集表示的是公共部分,如果公共部分能够决定各自私有部分,那么必定自然拼接后可以复原。
结果为3NF且具有依赖保持和连接不失真的分解
更多推荐
所有评论(0)