tercera techniques segunda resueltos repetitivo repetidos regla qué que normalizacion normal informatica grupos grupo forma fnbc examples ejercicios ejemplos ejemplo datos data cuarta cual consiste conceptos bases 3fn 2nf 2fn 1nf 1fn database database-design relational-database 3nf bcnf

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:

  1. X es una tecla o superclave en R
  2. 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:

  1. employeeNumber ⟶ firstName, dateOfBirth, address, departmentNumber
  2. 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:

  1. departmentNumber no es una clave o superclave en EMP_DEPT
  2. 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:

  1. socialSecurityNumber , courseNumber
  2. studentNumber , courseNumber

Considere las siguientes dependencias funcionales:

  1. studentNumber ⟶ socialSecurityNumber
  2. 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.