考虑到前两节求函数依赖和求解范式的例题较为简单,因此总结了一些错误率较高的题目,也可以当作练手题熟练函数依赖与范式。其实在求解范式的过程中我们就已经需要求得一些函数依赖的关系。
一、题目
问:下面的关系模式属于第几范式?
R(A,B,C,D),F={B→D,AB→C}
R(A,B,C,D,E),F={AB→CE,E→AB,C→D}
R(A,B,C,D),F={B→D,D→B,AB→C}
R(A,B,C),F={A→B,B→A,A→C}
R(A,B,C),F={A→B,B→A,C→A}
R(A,B,C,D),F={A→C,D→B}
R(A,B,C,D),F={A→C,CD→B}
二、求解步骤
先确定关系R的候选码,有时可能有几个。
找出其中的函数依赖,部分依赖、传递依赖等。
通过第2步中的函数依赖,再去看看是不是非主属性对候选码的依赖(一定要是非主属性)。
通过范式的定义判断关系R是属于第几范式。
范式的简单理解:
第一范式:所有属性不可再分。是关系模型的都属于第一范式。
第二范式:非主属性完全函数依赖于码。看清是非主属性。在第一范式的基础上加了一个条件。
第三范式:非主属性既不传递依赖于码,也不部分依赖于码。在第一范式上加了两个条件,在第二范式的基础上加了一个条件。
BC范式:如果X→Y,且Y不属于X,则X中必含有码。
三、解答
R(A,B,C,D),F={B→D,AB→C}
码:(A,B)
非主属性:C,D
函数依赖:
AB→B→D
AB→C
部分依赖:AB--部分-->D
传递依赖:AB--传递-->D
因为,D为非主属性,对候选码有部分依赖和传递依赖
所以,属于第一范式。
R(A,B,C,D,E),F={AB→CE,E→AB,C→D}
码:(A,B)和E
非主属性:C,D
函数依赖:
AB→C→D
AB→E
E→AB→C→D
部分依赖:无
传递依赖:AB--传递-->D
因为,D为非主属性,对候选码没有部分依赖和但有传递依赖
所以,属于第二范式。
R(A,B,C,D),F={B→D,D→B,AB→C}
码:(A,B)和(A,D)
非主属性:C
函数依赖:
AB→B→D
AB→C
AD→AB→C
ps:这里为什么不是AD--传递-->C呢?因为题中B→D,D→B,满足直接依赖的关系,而不满足传递依赖的定义,这里就是直接依赖和传递依赖的区别。
部分依赖:无
传递依赖:无
因为,C为非主属性,对候选码没有部分依赖和传递依赖
所以,属于第三范式。
R(A,B,C),F={A→B,B→A,A→C}
码:A和B
非主属性:C
函数依赖:
A→B
A→C
B→A→C
ps:这里和上面解释的一样,因为A→B,B→A,所以是直接依赖:B--直接-->C
部分依赖:无
传递依赖:无
因为,C为非主属性,对候选码没有部分依赖和传递依赖
所以,属于第三范式。
R(A,B,C),F={A→B,B→A,C→A}
码:C
非主属性:A,B
函数依赖:
C→A→B
B→A
部分依赖:无
传递依赖:C--传递-->B
因为,B为非主属性,对候选码没有部分依赖和但有传递依赖
所以,属于第二范式。
R(A,B,C,D),F={A→C,D→B}
码:(A,D)
非主属性:B,C
函数依赖:
AD→A→C
AD→D→B
部分依赖:AD--部分-->C,AD--部分-->B
传递依赖:AD--传递-->C,AD--传递-->B
因为,B、C为非主属性,对候选码有部分依赖和传递依赖
所以,属于第一范式。
R(A,B,C,D),F={A→C,CD→B}
码:(A,D)
非主属性:B,C
函数依赖:
AD→A→C
AD→D+C→B
ps:本来AD就能推出D,加上前面推出的C就能合成CD→B
部分依赖:AD--部分-->C,AD--部分-->B
传递依赖:AD--传递-->C,AD--传递-->B
因为,B、C为非主属性,对候选码有部分依赖和传递依赖
所以,属于第一范式。
这里由于打字无法取得手写那样的效果,有些地方函数依赖关系反而让我写复杂了一点,大家就将就点看吧,有问题可以评论区讨论。由于我的才疏学浅,如有错误,欢迎批评指正!