Hurry Rechard
Articles8
Tags3
Categories3
分解为具有无损连接性和依赖保持性的3NF的方法以及例子

分解为具有无损连接性和依赖保持性的3NF的方法以及例子


​ 此篇为本人个人博客的第一篇,从博主个人的csdn搬运而来,关于数据库的3NF 分解问题。

通用方法

输入:关系模式R<U, F>
输出:具有无损连接性和函数依赖保持性的3NF分解ρ = {R1, R2, …, Rk}.

方法:
(1)__最小化__。求F的最小函数依赖集Fm。
(2)__排除__。若Fm中存在X->A,使得XA = U,则R已是3NF,转(6)。
(3)__独立__。若R中某些属性未出现在Fm中任一函数依赖的左部或右部,则将它们从R中分出去,单独构成一个关系子模式。
(4)分组(相同左部原则)。对于Fm中的每一个X->A,都构成一个关系子模式XA(但若有X->A1, X->A2,…, X->An,可用合并规则便为X -> A1A2…An作为ρ的一个子模式)。
经过以上几步,求出函数依赖保持性分解:ρ = {R1, R2, …, Rk}。
(5)__添键__。若ρ中没有一个子模式含有R的候选键X,则令ρ = ρ ∪ {X};若存在Ri包含于Rj(i ≠ j),则删去Ri。
(6)__停止分解__,输出ρ。
此时ρ是既具有无损连接性又具有函数依赖保持性的3NF分解。

例子

关系模式R(A, B, C, D, E, P, G, H, I, J)满足下列的函数依赖:{AB -> E, ABE -> GP, B -> PI, C -> J, CJ -> I, G -> H}。
(1) 求出最小函数依赖集Fm = {AB -> E, AB -> G, B -> P, B -> I, C -> J, C -> I, G -> H},候选键为ABCD。

(2)不存在满足X->A,使得XA = U的依赖。

(3)D未存在在任意一函数依赖中,故独立出去,R = R - {D} =
{A, B, C, E, P, G, H, I, J}。

(4)由于AB -> E, AB -> G有相同左部,故合并为AB -> EG,同理有B -> PI, C -> JI。

(5)R中不含候选键ABCD,故添加ABCD进入。

(6)输出**ρ = {ABEG, BPI, CJI, GH, ABCD}**,即为具有无损连接性和依赖保持性的3NF。

最小函数依赖集Fm的定义,求法以及举例

Author:Hurry Rechard
Link:https://hurry-hub.github.io/2021/06/06/3NF/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可
×