用DBMS中的例子解释BCNF

BCNF(Boyce Codd Normal Form)是3NF的高级版本。如果每个函数依赖 X->Y,X 是该表的超级键,则该表在 BCNF 中。对于 BCNF,表应该是 3NF,并且对于每个 FD。LHS 是超级钥匙。

示例

考虑具有属性(学生、学科、教师)的关系 R。

学生老师主题
Jhansi纳雷什Database
占西达斯C
子布纳雷什Database
子布普拉萨德C

F: { (student, Teacher) -> subject

(student, subject) -> Teacher

Teacher -> subject}

候选键是(学生,教师)和(学生,学科)。

上述关系在 3NF 中[因为没有传递依赖]。如果对于每个非平凡的 FD X->Y,X 必须是键,则关系 R 在 BCNF 中。

上述关系在BCNF中是没有的,因为在FD(teacher->subject)中,teacher不是key。这种关系存在异常 -

例如,如果我们尝试删除学生 Subbu,我们将丢失 R. Prasad 教授 C 的信息。这些困难是由教师是决定因素而不是候选键这一事实造成的。

BCNF的分解

教师-> 主题违反了 BCNF [因为教师不是候选键]。

如果 X->Y 违反 BCNF,则将 R 分为 R1(X, Y) 和 R2(RY)。

所以R分为两个关系R1(Teacher,subject)和R2(student,Teacher)。

R1

老师主题
纳雷什数据库
K.DASC
R.PrasadC

R2

学生老师
Jhansi纳雷什
Jhansi达斯
Subbu纳雷什
Subbu普拉萨德

R中存在的所有异常,现在在上述两个关系中都被删除了。

笔记

BCNF 分解并不总是满足依赖保留属性。在 BCNF 分解之后,如果不保留依赖关系,那么我们必须决定是要保留在 BCNF 中还是回滚到 3NF。这个回滚过程称为非规范化。

以上是 用DBMS中的例子解释BCNF 的全部内容, 来源链接: utcz.com/z/331753.html

回到顶部