database - techniques - ¿Cuál es la diferencia entre 3NF y BCNF?
tercera forma normal en base de datos ejemplos (1)
La diferencia entre 3NF y BCNF es sutil.
3NF
Definición
Una relación está en 3NF si está en 2NF y ningún atributo no principal depende transitoriamente de la clave primaria. En otras palabras, una relación R está en 3NF si para cada dependencia funcional X ⟶ A en R se cumple al menos una de las siguientes condiciones:
- X es una tecla o superclave en R
- A es un atributo principal en R
Ejemplo
Dada la siguiente relación:
EMP_DEPT (firstName, employeeNumber, dateOfBirth, address, departmentNumber, departmentName)
Un empleado solo puede trabajar en un departamento y cada departamento tiene muchos empleados.
La clave candidata es employeeNumber .
Considere las siguientes dependencias funcionales:
- employeeNumber ⟶ firstName, dateOfBirth, address, departmentNumber
- departmentNumber ⟶ departmentName
Dada la definición anterior, es posible concluir que la relación EMP_DEPT no está en 3NF porque la segunda dependencia funcional no cumple ninguna de las 2 condiciones del 3NF:
- departmentNumber no es una clave o superclave en EMP_DEPT
- departmentName no es un atributo principal en EMP_DEPT
BCNF
Definición
Una relación R está en BCNF si está en 3NF y para cada dependencia funcional X ⟶ A en R, X es una tecla o superclave en R. En otras palabras, la única diferencia entre 3NF y BCNF es que en BCNF no está presente la segunda condición del 3NF. Esto hace que BCNF sea más estricto que 3NF, ya que cualquier relación que esté en BCNF estará en 3NF, pero no necesariamente cada relación que esté en 3NF estará en BCNF.
Ejemplo
Dada la siguiente relación:
STUDENT_COURSE (studentNumber, socialSecurityNumber, courseNumber)
Un estudiante puede ayudar a muchos cursos y en un curso puede haber muchos estudiantes.
Las claves candidatas son:
- socialSecurityNumber , courseNumber
- studentNumber , courseNumber
Considere las siguientes dependencias funcionales:
- studentNumber ⟶ socialSecurityNumber
- socialSecurityNumber ⟶ studentNumber
Dada la definición anterior, es posible concluir que STUDENT_COURSE no está en BCNF ya que al menos studentNumber no es una clave o superclave en STUDENT_COURSE.
¿Puede alguien explicarme la diferencia entre 3NF y BCNF? Sería genial si también pudieras dar algunos ejemplos. Gracias.