这里写目录标题
1 .关于函数依赖的公理 Armstrong公理A1~A3
设
R
(
U
)
R(U)
R(U)是属性集
U
=
A
1
,
A
2
,
…
,
A
n
上
U={A_1,A_2,…,A_n}上
U=A1,A2,…,An上的一个关系模式,
F
F
F为
R
(
U
)
R(U)
R(U)的一组
函数依赖,记为
R
(
U
,
F
)
R(U, F)
R(U,F), 则有如下规则成立
- [A1]自反律(Reflexivity rule):若Y⊆X⊆U(Y是X的一部分), 则X→Y被F逻辑蕴涵(也就是X→Y恒成立),这条公理表示一个属性组可以决定它自身的每一个属性。
- [A2]增广律(Augmentation rule):若X→Y∈F, 且Z∈U(说明Z是U上的一个属性或属性组), 则XZ→YZ(在X→Y两端个加上一个Z)被F逻辑蕴涵
- [A3]传递律(Transtivity rule):若X→Y∈F, 且Y→Z, 则X→Z被F逻辑
蕴涵。
这三条公理的作用是用已知的函数依赖推出求隐含的函数依赖
证明:
1.1 Armstrong公理导出的引理
- (a)合并律(Union Rule):若X→Y且X→Z, 则X →YZ。
- (b)伪传递律(Pseudo Transitivity):若X→Y且WY→Z(其实就是把WY换成WX就可以了), 则XW→Z。
- ©分解律(Decomposition Rule):若X→Y且Z⊆Y, 则X→Z。
[引理3]如果 A 1 , A 2 , … , A n A_1,A_2,…,A_n A1,A2,…,An是属性,则 X → A 1 , A 2 , … , A n X→A_1,A_2,…,A_n X→A1,A2,…,An 当且仅当对每个 A i A_i Ai 有 X → A i ( 1 ≤ i ≤ n ) X→Ai(1≤ i ≤ n) X→Ai(1≤i≤n)
这条引理说明了属性组合的函数依赖与单一属性的函数依赖的关系
2. 属性(集)闭包
前面说的闭包是函数依赖集的闭包,这里说的是属性(集)闭包
对
R
(
U
,
F
)
,
X
⊆
U
,
U
=
R(U, F), X⊆U, U =
R(U,F),X⊆U,U= {
A
1
,
A
2
,
…
,
A
n
A_1,A_2,…,A_n
A1,A2,…,An}, 令:
X
F
+
X^+_F
XF+ = {
A
i
A_i
Ai | 用Armstrong 公理
A
1
,
A
2
,
A
3
A1,A2,A3
A1,A2,A3可从
F
F
F导出
X
→
A
i
X→ A_i
X→Ai }(从公理可以推出
X
X
X决定的所有单一属性的集合)
这里称
X
F
+
X^+_F
XF+为
X
X
X关于
F
F
F的属性(集)闭包。
显然
X
⊆
X
F
+
X⊆X^+_F
X⊆XF+
这个定义的你有毒就是如何判断一个
X
→
Y
X→Y
X→Y(一个函数依赖)是否属于一个函数依赖集,只需要判断
Y
⊆
X
F
+
Y⊆X^+_F
Y⊆XF+即可
X
→
Y
X→Y
X→Y,当且仅当
Y
⊆
X
F
+
Y⊆X^+_F
Y⊆XF+
3.函数依赖集的最小覆盖
3.1 覆盖
对
R
(
U
)
R(U)
R(U)上的两个函数依赖集合
F
、
G
F、G
F、G, 如果
F
+
=
G
+
F^+= G^+
F+=G+,则称
F
F
F和
G
G
G是等价的,也称F覆盖G或者G覆盖F。
3.2 计算一属性集关于一组函数依赖的属性闭包
I
n
p
u
t
:
有
限
属
性
集
合
U
,
U
上
的
函
数
依
赖
集
合
F
,
及
U
的
子
集
X
Input:有限属性集合U, U上的函数依赖集合F, 及U的子集X
Input:有限属性集合U,U上的函数依赖集合F,及U的子集X
O
u
t
p
u
t
:
X
关
于
F
的
属
性
闭
包
X
+
,
记
为
X
F
+
Output:X关于F的属性闭包X^+ , 记为X^+_F
Output:X关于F的属性闭包X+,记为XF+
M
e
t
h
o
d
:
按
下
列
规
则
递
归
计
算
属
性
序
列
X
0
,
X
1
Method:按下列规则递归计算属性序列X^0, X^1
Method:按下列规则递归计算属性序列X0,X1,…
流程:
- 令 X 0 = X , i = 0 令X^0=X, i=0 令X0=X,i=0
- B B B = { A ∣ ( ∃ V ) ( ∃ W ) ( V → W ∈ F ∩ V ⊆ X i ∩ A ⊆ W ) A|(∃V)(∃W)(V→W∈F ∩ V⊆X^i ∩ A⊆W) A∣(∃V)(∃W)(V→W∈F∩V⊆Xi∩A⊆W)}(如果V中的属性都是之前已经求出来的属性闭包中的元素 ,那么W就是我要求的属性集合)
- X i + 1 = B ∪ X i X^{i+1} =B∪X^i Xi+1=B∪Xi(将刚刚求出来的集合加入)
- i f ( X i + 1 ! = X i ) if(X^{i+1}! =X^i) if(Xi+1!=Xi)(当没有变化的时候)
- ___ t h e n then then i = i + 1 i=i+1 i=i+1
- ___ g o t o goto goto 2 2 2
- X F + = X i X^+_F=X^{i} XF+=Xi算法终止
示例:
3.3 最小覆盖
[引理6] 每个函数依赖集F可被一个其右端至多有一个属性的函数依赖之集G覆盖。
用公式表达即为:6,
G
G
G = {
X
→
A
∣
X
→
Y
∈
F
∩
A
∈
Y
X→A | X→Y ∈F ∩A∈Y
X→A∣X→Y∈F∩A∈Y }
这里,比如
X
→
Y
X→Y
X→Y,X中可能有很多属性,Y中也可能会有很多属性,如果我们把Y拆成单一的一个个属性,设为A,即有
X
→
A
X→A
X→A
[定义] 若F满足以下条件,则称F为最小覆盖(minimal Cover)或最小依赖集
- F中每个函数依赖( X → Y X→Y X→Y)的右部( Y Y Y)是单个属性;(单一属性)
- 对任何 X → A ∈ F X→A∈F X→A∈F , 有 F − F- F−{ X → A X→A X→A }不等价于F;(说明每个函数依赖 X → A X→A X→A是不可或缺的 )
- 对任何 X → A ∈ F , Z ⊆ X , ( F − X→A∈F, Z⊆X, ( F- X→A∈F,Z⊆X,(F−{ X → A X→A X→A })∪{ Z → A Z→A Z→A}不等价于F (说明 X → A X→A X→A中的左端 X X X 没有多余的属性,公式中Z是X的真子集)
每个函数依赖集
F
F
F都有等价的最小覆盖
F
‘
F‘
F‘
怎么求最小依赖?
为什么要求最小覆盖?
这个和后面的模式分解有关系