数据库管理系统(DBMS)中BCNF的解释及示例


BCNF (Boyce-Codd范式)3NF的进阶版本。如果每个函数依赖X->Y中,X都是表中的超键,则该表处于BCNF。对于BCNF,表应处于3NF,并且对于每个FD,LHS都是超键。

示例

考虑一个具有属性(学生, 科目, 教师)的关系R。

学生教师科目
JhansiP.Naresh数据库
jhansiK.DasC
subbuP.Naresh数据库
subbuR.PrasadC
F: { (student, Teacher) -> subject
(student, subject) -> Teacher
Teacher -> subject}

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

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

上述关系不处于BCNF,因为在FD (教师->科目)中,教师不是键。此关系存在异常:

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

BCNF分解

教师->科目违反了BCNF(因为教师不是候选键)。

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

因此,R被分成两个关系R1(教师, 科目)和R2(学生, 教师)。

R1

教师科目
P.Naresh数据库
K.DASC
R.PrasadC

R2

学生教师
JhansiP.Naresh
JhansiK.Das
SubbuP.Naresh
SubbuR.Prasad

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

注意

BCNF分解并不总是满足依赖保持属性。BCNF分解后,如果依赖关系未保持,则必须决定是保持BCNF还是回滚到3NF。此回滚过程称为反规范化。

更新于:2023年10月31日

57K+ 次浏览

启动你的职业生涯

完成课程获得认证

开始学习
广告