一、范式总结
第一步,先求候选码,由此得到:主属性、非主属性。
二、判断部分函数依赖的技巧
【回顾】:部分函数依赖
(X,Y)——>Z;
X——>Z 或者 Y——>Z
题型:给出函数依赖集和属性,判断该关系模式属于第几范式。
(一般题目中给出的属性都是原子的,不可再分的。)
示例:
求出候选码
若是候选码为属性的组合,则可能有部分函数依赖;(存在部分函数依赖,1NF)
若是候选码是单个属性,一定没有部分函数依赖。
三、判断传递函数依赖的技巧
【回顾】传递函数依赖
示例:
存在传递函数依赖,所以是第二范式。
候选码,一定是伪传递率中的 X!
四、范式-真题
真题1:
没有部分函数依赖,没有传递函数依赖 = 3NF
真题2:
真题3:
真题4:
真题5:
有伪传递函数依赖。
真题6:
五、关系分解的真题
真题1:(了解即可)
【回顾】部分函数依赖的规范化:(此时分解后,可能存在传递函数依赖)
若(X,Y)——> Z;X——>A,X——>B,X——>C,Y——>D,Y——>E
1、将所有依赖于X的所有非主属性,加上X,一起移出来。X、A、B、C(原表保留X,为了将原本的函数依赖保持住)
2、将所有依赖于Y的所有非主属性,加上Y,一起移出来。Y、D、E(原表保留Y,为了将原本的函数依赖保持住)
3、(X,Y)——> Z:X、Y、Z;(为了将原本的函数依赖保持住)
【回顾】传递函数依赖,规范化:
若:X——>Y,Y——>Z1,Y——>Z2;(X,Y,Z1,Z2)
将Y和Y决定的属性都移出原表,原表要保留Y
(X,Y)、(Y,Z1,Z2)
真题2:
真题3:
六、无损连接、保持函数依赖
关系模式的分解:
把一个关系模式分解成若干个关系模式的过程。
为什么需要分解关系模式?
因为原来的关系模式可能造成数据冗余或给数据库带来潜在的不一致性。
只有能够保证分解后的关系模式与原关系模式等价,分解方法才有意义。
1)分解后形成的行的关系模式中是否为无损连接
2)是否保持函数依赖
6-1、无损连接的定义
若:R关系,分解为:R1,R2,R3关系
将 R1,R2,R3关系自然连接,去掉重复属性,看是否 = 原来的属性U。
【注意】:
R1,R2,R3中要有重复属性列,否则,自然连接为空集!!!
6-2、保持函数依赖的定义
示例2:有属性集,ABCDEF;存在这样的函数依赖集{A->BC , CD->E , B->D , BE->F , EF->A},然后有这样的分解{ABC , BD , BEF}。
设U1=ABC,(A->BC),
U2=BD,(B->D) ,
U3=BEF,(BE->F),
即我们不能推出 CD->E ,EF->A,所以也不具有保持函数依赖的特性。
6-3、真题
真题1:
真题2:D
真题3: