logo

Forma normal de Boyce Codd (BCNF)

  • BCNF es la versión avanzada de 3NF. Es más estricto que 3NF.
  • Una tabla está en BCNF si cada dependencia funcional X → Y, X es la superclave de la tabla.
  • Para BCNF, la tabla debe estar en 3NF y para cada FD, LHS es la súper clave.

Ejemplo: Supongamos que hay una empresa donde los empleados trabajan en más de un departamento.

variables de tipo java

Tabla EMPLEADO:

EMP_ID EMP_COUNTRY EMP_DEPT DEPTO_TYPE EMP_DEPT_NO
264 India Diseño D394 283
264 India Pruebas D394 300
364 Reino Unido Historias D283 232
364 Reino Unido Desarrollando D283 549

En la tabla anterior, las dependencias funcionales son las siguientes:

 EMP_ID → EMP_COUNTRY EMP_DEPT → {DEPT_TYPE, EMP_DEPT_NO} 

Clave de candidato: {EMP-ID, EMP-DEPT}

La tabla no está en BCNF porque ni EMP_DEPT ni EMP_ID por sí solos son claves.

Para convertir la tabla dada a BCNF, la descomponemos en tres tablas:

Tabla EMP_COUNTRY:

EMP_ID EMP_COUNTRY
264 India
264 India

Tabla EMP_DEPT:

EMP_DEPT DEPTO_TYPE EMP_DEPT_NO
Diseño D394 283
Pruebas D394 300
Historias D283 232
Desarrollando D283 549

Tabla EMP_DEPT_MAPPING:

EMP_ID EMP_DEPT
D394 283
D394 300
D283 232
D283 549

Dependencias funcionales:

 EMP_ID → EMP_COUNTRY EMP_DEPT → {DEPT_TYPE, EMP_DEPT_NO} 

Claves candidatas:

Para la primera mesa: EMP_ID
Para la segunda mesa: EMP_DEPT
Para la tercera mesa: {EMP_ID, EMP_DEPT}

Ahora, esto está en BCNF porque la parte izquierda de ambas dependencias funcionales es una clave.