在关系数据库设计中,当我们谈论函数依赖(Functional Dependency,简称FD)的投影时,我们指的是将原始的函数依赖集F投影到关系R的某个子集(或投影)Ri上,得到Ri上的函数依赖集πRi(F)。以下是关于πRi(F)的详细解释:
定义
假设我们有一个关系R及其上的函数依赖集F,同时有一个关系R的子集Ri(即R的投影)。那么,F在Ri上的投影,记作πRi(F),就是F中所有在Ri上仍然成立的函数依赖的集合。
判断准则
- 检查属性存在性:
- 对于F中的每一个函数依赖X → Y,我们首先要检查X和Y中的属性是否都存在于Ri中。如果X或Y中的任何属性不在Ri中,那么这个函数依赖在Ri上就不成立,因此不应包含在πRi(F)中。
- 保持函数依赖:
- 如果X和Y中的属性都存在于Ri中,我们需要进一步确定这个函数依赖在Ri上是否仍然成立。这通常涉及对Ri中的数据进行检查,以验证是否当X的值相同时,Y的值也相同。
- 处理传递函数依赖:
- 如果F中存在传递函数依赖(如X → Y → Z),我们需要分别检查X → Y和Y → Z在Ri上是否成立。即使X → Y在Ri上成立,但如果Y → Z不成立,那么X → Z在Ri上也不成立。
示例
假设我们有关系R(A, B, C, D)及其上的函数依赖集F = {A → B, B → C, C → D}。现在,我们考虑R的一个投影Ri = R(C, D)。
- F在Ri上的投影πRi(F)需要包含所有在Ri上成立的函数依赖。
- 检查F中的每个函数依赖:
- A → B:由于B不在Ri中,这个函数依赖在Ri上不成立。
- B → C:同样,由于B不在Ri中,这个函数依赖在Ri上不成立。
- C → D:但是,C和D都在Ri中,并且这个函数依赖在Ri上仍然成立(假设在Ri的数据中,当C的值相同时,D的值也相同)。
- 因此,πRi(F) = {C → D}。
算法
10.3
检验一个分解是否保持函数依赖。
◼
输入:分解
={R
1
, R
2
,
,R
p
}
及其函数依赖集
F
。
◼
输出:分解
是否保持
F
。
◼
方法:
(1)
计算
Ri
(F)
,
1≤i≤p
。
(2)
令
G=
∪
p i=1
Ri
(F)
,对
F
中的每个
FD X→Y
,
在
G
中计算
X
+
。若
Y
X
+
,检查结束,输出为假,
分解
不具有保持依赖性。
(3)
输出为真,分解
具有保持依赖性。