1、设有关系模式R(A,B,C,D)上的函数依赖集F={AB→CD,C→A},则R最高属于(B)。
(A) 2NF (B) 3NF (C) BCNF (D) 4NF
2、设有关系R和函数依赖F:R(X,Y,Z),F = { Y→Z,XZ→Y}。试求下列问题:
(1)关系R属于第几范式?
(2)如果关系R不属于BCNF,请将关系R逐步分解为BCNF。
要求:写出达到每一级范式的分解过程,并指明消除什么类型的函数依赖。
解:1)R是3NF。侯选码为XY和XZ,R中所有属性都是主属性,不存在非主属性对码的传递依赖。
2)
R1(X,Y,Z),F = { XZ→Y}
R2(Y,Z),F = { Y→Z }
消除了非主属性对码的传递依赖。 //第1)题不是说不存在非主属性对码的传递依赖?
F1和F2中的函数依赖都是非平凡的,并且决定因素是候选码,所以上述关系模式是BCNF。
这是我在百度文库上写题有一些疑惑,第一题C→A难道不是非主属性对码的传递依赖吗,怎么会属于3NF?对于范式的问题我还有点绕,大家有没有推荐的帖子或者视频?请大家指点指点,接受批评。
关于题目1:
在给定的关系模式 R(A,B,C,D)上,函数依赖集 F={AB→CD,C→A},根据 3NF 的定义,对于一个关系模式 R,若它的所有非主属性都完全函数依赖于候选码,则 R 就满足 3NF。在此题中,候选码为 AB 和 C,因为 F 中的依赖式 CD→AB 已经让 D 成为 AB 的非主属性,所以必须保证 CD 是 AB 的闭包,而根据已给定的依赖式 C→A,C 可以确定 A,因此CD是一个主属性,R(A,B,C,D)满足 3NF,选项为 B。
关于题目2:
(1) 关系 R 属于 3NF。因为 R 中属性 X,Y 和 Z 在 F 中是完全函数依赖于每个候选码,都属于主属性,不存在非主属性对主属性的传递依赖。
(2) 如果 R 不属于 BCNF,则必须存在一个函数依赖 X → YZ,此时需要使用维基-斯特劳斯分解算法,将 R 分解为:R1(X, Z); R2(X, Y, Z)。这样可以消除非平凡的函数依赖 X → YZ,同时也消除了 XZ → Y 并保持了 Y → Z 的非平凡依赖型,因此 R1(X, Z) 属于 BCNF。R2(X, Y, Z) 属于 BCNF,因为其中 Y 是主属性且 F2 中的函数依赖 Y→Z 是非平凡的,同时 Y 是 R2 的一个候选码。因此整个分解过程符合 BCNF 的定义。因此答案为:(1) 3NF,(2) R 分解为 R1(X, Z) 和 R2(X, Y, Z)。