用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.DAS | C |
R.Prasad | C |
R2
学生 | 老师 |
---|---|
Jhansi | 纳雷什 |
Jhansi | 达斯 |
Subbu | 纳雷什 |
Subbu | 普拉萨德 |
R中存在的所有异常,现在在上述两个关系中都被删除了。
笔记
BCNF 分解并不总是满足依赖保留属性。在 BCNF 分解之后,如果不保留依赖关系,那么我们必须决定是要保留在 BCNF 中还是回滚到 3NF。这个回滚过程称为非规范化。
以上是 用DBMS中的例子解释BCNF 的全部内容, 来源链接: utcz.com/z/331753.html