cac*_*oat 33 database-design relational-database 3nf database-normalization bcnf
有人可以向我解释3NF和BCNF之间的区别吗?如果您还可以提供一些示例,那就太棒了.谢谢.
Mos*_*cho 45
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中的键或超级键.