- 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.