有人可以向我解释3NF和BCNF之间的区别吗?如果您还可以提供一些示例,那将会很棒。感谢。
答案 0 :(得分:44)
3NF和BCNF之间的区别是微妙的。
如果它在2NF中,则关系在3NF中,并且非主要属性不会过渡地依赖于主键。换句话说,如果对于R中的每个函数依赖关系X⟶A,则关系R在3NF中,满足以下条件中的至少一个:
鉴于以下关系:
EMP_DEPT(firstName,employeeNumber,dateOfBirth,address,departmentNumber,departmentName)
员工只能在一个部门工作,每个部门都有很多员工。
候选键是 employeeNumber 。
考虑以下功能依赖性:
根据上面的定义,可以得出结论:EMP_DEPT关系不在3NF中,因为第二个函数依赖关系不满足3NF的2个条件中的任何一个:
如果它在3NF中,则关系R在BCNF中;对于R中的每个函数依赖关系X⟶A,X是R中的密钥或超级密钥。换句话说,3NF和BCNF之间的唯一区别在于它在BCNF中不存在3NF的第二个条件。这使得BCNF比3NF更严格,因为BCNF中的任何关系都将在3NF中,但不一定在3NF中的每个关系都将在BCNF中。
鉴于以下关系:
STUDENT_COURSE(studentNumber,socialSecurityNumber,courseNumber)
学生可以参加许多课程,在课程中可以有很多学生。
候选键是:
考虑以下功能依赖性:
根据上面的定义,可以得出结论,STUDENT_COURSE不在BCNF中,因为至少studentNumber不是STUDENT_COURSE中的键或超级键。