用DBMS中的例子解释BCNF
BCNF(BoyceCoddNormalForm)是3NF的高级版本。如果每个函数依赖X->Y,X是该表的超级键,则该表在BCNF中。对于BCNF,表应该是3NF,并且对于每个FD。LHS是超级钥匙。
示例
考虑具有属性(学生、学科、教师)的关系R。
F: { (student, Teacher) -> subject
(student, subject) -> Teacher
Teacher -> subject}候选键是(学生,教师)和(学生,学科)。
上述关系在3NF中[因为没有传递依赖]。如果对于每个非平凡的FDX->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
R2
R中存在的所有异常,现在在上述两个关系中都被删除了。
笔记
BCNF分解并不总是满足依赖保留属性。在BCNF分解之后,如果不保留依赖关系,那么我们必须决定是要保留在BCNF中还是回滚到3NF。这个回滚过程称为非规范化。
热门推荐
10 情侣祝福语古文简短独特
11 酒店伴娘祝福语简短
12 晚上甜蜜的祝福语简短
13 给新娘简短的祝福语
14 当爸爸的简短祝福语
15 洛宁新年祝福语大全简短
16 新年祝福语简短搞笑幽默
17 结婚祝福语大全简短霸气
18 新人结婚祝福语简短高端