考虑以下四个关系模式。对于每个模式,列出了所有重要的功能依赖项,带下划线的属性是各自的主键。
- 模式一:注册( rollno ,课程)
字段“courses”是一个集合值属性,包含学生注册的课程集。
非平凡的函数依赖
rollno → 课程 - 模式二:注册( rollno、coursid 、email)
非平凡的函数依赖:
rollno, courseid → 电子邮件
电子邮件 → rollno - 模式三:注册( rollno、courseid 、marks、grade)
非平凡的函数依赖:
rollno, courseid, → 分数, 成绩
分数→等级 - 模式四:注册( rollno、courseid 、credit)
非平凡的函数依赖:
rollno, courseid → 学分
课程编号 → 学分
上面哪一种关系模式在 3NF 中而不在 BCNF 中?
(A)模式一
(B)模式二
(C)模式三
(D)模式四答案:(乙)
解释:
- 模式一:注册( rollno ,课程)
字段“courses”是一个集合值属性,包含学生注册的课程集。
非平凡的函数依赖
rollno → 课程
因为 rollno 是主键,所以这个关系在 BCNF 和 3 NF 中。 - 模式二:注册( rollno、coursid 、email)
非平凡的函数依赖:
rollno, courseid → 电子邮件
电子邮件 → rollno
由于 { rollno, coursid } 是主键,所以 rollno 和 coursid 是主要属性。 email 是非主要属性。
Functional depedency (FD) rollno, courseid → email在 BCNF 和 3NF 中,但 FD email → rollno违反了 BCNF 的规则,因为 email 不是超键。但它满足 3 NF 规则,因为 rollno 是素数属性。
因此,总体而言,这种关系在 3 NF 中,但不在 BCNF 中。 - 模式三:注册( rollno、courseid 、marks、grade)
非平凡的函数依赖:
rollno, courseid, → 分数, 等级
分数→等级
由于rollno,courseid是主键,所以rollno和courseid是主要属性,而marks和grade是非主要属性。
FD rollno、courseid、→marks、grade满足 BCNF 以及 3 NF。
FD标记 → 等级不满足 3 NF,因为 nither 标记是超级键,等级也不是主要属性。所以,也不能在 BCNF 中。
因此,总体而言,这种关系既不属于 3 NF,也不属于 BCNF,但它不违反 2 NF 的规则,因此只能属于 2 NF。 - 模式四:注册( rollno、courseid 、credit)
非平凡的函数依赖:
rollno, courseid → 学分
课程编号 → 学分
因为rollno, courseid是主键,所以 rollno 和 courseid 是主要属性,credit 是非主要属性。
FD rollno, courseid → credit满足 BCNF 以及 3 NF。
FD courseid → credit违反了 2 NF 的规则,所以不能在 2NF 中。
因此,总体而言,这不在 2 NF、3 NF 和 BCNF 中。但它仅在 1 NF 中。
因此,只有模式-II 在 3 NF 中而不在 BCNF 中。
选项(B)是正确的。
这个问题的测验