版权归原作者所有,如有侵权,请联系我们

[科普中国]-传递函数依赖

科学百科
原创
科学百科为用户提供权威科普内容,打造知识科普阵地
收藏

传递函数依赖属于关系模式R(U),在关系模式R(U)中,设X,Y,Z是U的不同的属性子集。1

定义1在关系模式R (U) 中, 如果X→Y, Y→Z, Z不是Y的子集, Y不函数决定X, 则称Z对X传递函数依赖 (Transitive Functional Dependency) 。该定义指明传递函数依赖包含2种情况:1

(1) Y⊆X成立, 这种情况传递函数依赖蜕变为部分函数依赖, 即Z部分函数依赖于X, 部分函数依赖是特殊的传递函数依赖。1

例证1:设关系模式R (U, F) , U={ Sno, Sna, Cno, G }, 其中 Sno:学号, Sna:姓名, Cno:课号, G:成绩, F={ (Sno Cno) →G, Sno→Sna }。1

(Sno Cno)→ Sno1

Sno→ Sna1

Sno不函数决定(Sno Cno)1

Sna不是Sno的子集1

【Sna传递函数依赖于(Sno Cno) 】1

但由于Sno ⊆ (Sno Cno) , 所以Sna 对 (Sno Cno) 的传递函数依赖蜕变成了部分函数依赖。1

例证2:若R∈3NF, 则R∈2NF。[若关系模式R (U, F) 的函数依赖集F中不存在非主属性对码的传递函数依赖, 则F中一定不存在非主属性对码的部分函数依赖。1

证明 (反证法) :假设关系模式R (U, F) 满足3NF, 而R不满足2NF, 即关系模式R (U, F) 的函数依赖集F中不存在非主属性对码的传递函数依赖, 而存在非主属性对码的部分函数依赖。1

F中存在非主属性对码的部分函数依赖即关系模式R中存在码X, 属性组Y, 非主属性Z, Y是X真子集, 有X→Z (码的定义) , X→Y (平凡依赖) , Y→Z成立, 所以X→ΡΖ, 即Z部分依赖于码X。同时Z又传递依赖于码X, 因为满足传递依赖的条件:1

X → Y 平凡函数依赖1

Y → Z1

Y 不函数决定 X1

Z 不是Y的子集1

【Z传递依赖于码X】1

与假设矛盾, 所以命题成立。1

(2) Y⊆X不成立, 这种情况是普通意义上的传递函数依赖。1

例证3:设关系模式R(U,F) ,U={Sno,Sdept,Sloc}, 其中Sno:学号,Sdept:系别,Sloc:住宿楼号;F={Sno→Sdept,Sdept→Sloc}。1

Sno→Sdept1

Sdept→Sloc1

Sdept不函数决定Sno1

Sloc不是Sdept的子集1

【Sloc传递函数依赖于Sno】1

定义1指出了部分函数依赖是特殊的传递函数依赖, 从而使命题“若R∈3NF, 则R∈2NF”得证, 也使得各种范式之间的包含关系 (图2) 成立, 使关系数据理论呈现系统化和一致性。1

1NF⊃2NF⊃3NF⊃BCNF⊃4NF⊃5NF1

范式间的包含关系1

定义2在R (U) 中, 如果X→Y, Y→Z, Y不是X的子集, Y不函数决定X , 则称Z对X传递函数依赖。2

因指出了Y不是X的子集, 所以否定了部分函数依赖是特殊的传递函数依赖。所定义的传递函数依赖只包含定义1中的情况 (2) , 从而无法证明命题“若R∈3NF, 则R∈2NF”的正确性, 使各种范式之间不具有图1的包含关系, 关系数据理论呈现局部性和不一致性。所以定义2不严谨。2

定义3在R (U) 中, 如果X→Y, Y→Z, Y不是X的子集, Z不是Y的子集, Z不是X的子集, Y不函数决定X, 则称Z对X传递函数依赖3。

同定义2一样指出了Y不是X的子集, 否定了部分函数依赖是特殊的传递函数依赖, 同样使各种范式之间不具有图1的包含关系, 关系数据理论呈现局部性和不一致性, 所以不严谨。3

定义4在R (U) 中, 如果X→Y, Y→Z, Y不函数决定X, 则称Z对X传递函数依赖4。由于没有指出Y不是X的子集和Z不是Y的子集[用A和B分别表示命题“Y是X的子集”和命题“Z是Y的子集”, 则(A, B) 真值表为 (0, 0) , (1, 1) , (1, 0) , (0, 1) ]。所以可以分下面4种情况进行讨论。1

(1) 当 (A, B) 为 (0, 0) 时, 这与定义1的情况 (2) 相同, 是普通意义上的真正的传递函数依赖。1

(2) 当 (A, B) 为 (1, 1) 时, 则Z ⊆ X成立, X→Z是平凡函数依赖。1

(3) 当 (A, B) 为 (1, 0) 时, 这与定义1的情况 (1) 相同, Z部分函数依赖于X。1

(4) 当 (A, B) 为 (0, 1) 时, 依据分解规则X对Z直接决定。1

所以定义4实际上把平凡函数依赖、部分函数依赖和X对Z直接决定都定义为传递函数依赖, 使传递函数依赖没有任何的特殊性, 尤其把平凡函数依赖和X对Z直接决定都概括为传递函数依赖不够严谨, 所以定义4同样不严谨。1

本词条内容贡献者为:

闫晓东 - 副教授 - 中央民族大学信息工程学院