
关系模式进行规范化的目地:规范化目的是使结构更合理,消除存储异常,使数据冗余尽量小,便于插入、删除和更新
关系模式进行规范化的原则:遵从概念单一化 "一事一地"原则,即一个关系模式描述一个实体或实体间的一种联系。规范的实质就是概念的单一化。
这个问题很难一言以蔽之,我给你举一个我常用的例子,希望对你有帮助:设关系模式R(U,F)中,U={A,B,C,D,E},F={AB→C,C→D,D→E},R的一个分解ρ={ R1(A,B,C),R2(C,D),R3(D,E)}。试判断ρ具有无损连接性。
解:① 首先构造初始表,如图(a)所示。
A B C D E
R1(A,B,C) a1 a2 a3 b14 b15
R2(C,D) b21 b22 a3 a4 b25
R3(D,E) b31 b32 b33 a4 a5
(a)
A B C D E
R1(A,B,C) a1 a2 a3 a4 a5
R2(C,D) b21 b22 a3 a4 b25
R3(D,E) b31 b32 b33 a4 a5
(b)
图:分解的无损连接判断表
② 按下列次序反复检查函数依赖和修改M:
AB→C,属性A、B(第1、2列)中都没有相同的分量值,故M值不变;
C→D,属性C中有相同值,故应改变D属性中的M值,b14改为a4;
D→E,属性D中有相同值,b15、b25均改为a5。
结果如图(b)所示。
③ 此时第一行已为a1,a2,a3,a4,a5,所以ρ具有无损连接性。
说明:在上例步骤后,如果没有出现a1,a2,a3,a4,a5,并不能马上判断ρ不具有无损连接性。而应该进行第二次的函数依赖检查和修改M。直至M值不能改变,才能判断ρ是否具有无损连接性。
首先了解一下几个概念:
1)把一个关系模式分解成若干个关系模式的过程,称为关系模式的分解。
2)把低一级的关系模式分解为若干个高一级的关系模式的方法不是唯一的。
3)只有能够保证分解后的关系模式与原关系模式等价,分解方法才有意义。
对于第一句话,为什么需要分解关系模式?因为原来的关系模式可能造成数据冗余或
给数据库带来潜在的不一致性。对于第二句话,根据不同语义,分解的原则也不尽相
同,所以方法肯定是不唯一的,譬如U={A,B,C},根据不同原则(随便你自己定),
可能分成(A,B)(A,C)也可能分成(B,C)(A,C)。对于第三句话,则是本文所要
讲的内容。
为了保证分解后的关系模式与原关系模式等价,我们要判定 1)分解后形成的行的关
系模式中是否为无损连接 2)是否保持函数依赖
一、无损连接的判定:
1)如果分解后的的关系模式是形如{U1,U2}这,里面只有两个,那很好做,就判断
或 是否成立,成立的话肯定是
无损连接。
2)如果是两个以上{U1,U2,U3....}这种,那就比较麻烦了,比如,有属性集,
ABCDEF,存在这样的函数依赖集{A->BC , CD->E , B->D , BE->F , EF->A},然后有
这样的分解{ABC , BD , BEF}。
例如:
设U1=ABC,U2=BD,U3=BEF,根据提供的函数依赖集,我们可得U1存在这样的
函数依赖A->BC,U2上的函数依赖是 B->D, U3的函数依赖是BE->F。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)