- BCNF è la versione avanzata di 3NF. È più severo di 3NF.
- Una tabella è in BCNF se ogni dipendenza funzionale X → Y, X è la super chiave della tabella.
- Per BCNF, la tabella dovrebbe essere in 3NF e per ogni FD, LHS è la super chiave.
Esempio: Supponiamo che esista un'azienda in cui i dipendenti lavorano in più di un reparto.
Java ottiene l'ora corrente
Tabella DIPENDENTI:
EMP_ID | EMP_COUNTRY | EMP_DEPT | DEPT_TYPE | EMP_DEPT_NO |
---|---|---|---|---|
264 | India | Progettare | D394 | 283 |
264 | India | Test | D394 | 300 |
364 | UK | I negozi | D283 | 232 |
364 | UK | Sviluppando | D283 | 549 |
Nella tabella sopra le dipendenze funzionali sono le seguenti:
EMP_ID → EMP_COUNTRY EMP_DEPT → {DEPT_TYPE, EMP_DEPT_NO}
Chiave candidato: {EMP-ID, EMP-DEPT}
La tabella non è in BCNF perché né EMP_DEPT né EMP_ID da soli sono chiavi.
Per convertire la tabella data in BCNF, la scomponiamo in tre tabelle:
Tabella EMP_COUNTRY:
EMP_ID | EMP_PAESE |
---|---|
264 | India |
264 | India |
Tabella EMP_DEPT:
EMP_DEPT | DEPT_TYPE | EMP_DEPT_NO |
---|---|---|
Progettare | D394 | 283 |
Test | D394 | 300 |
I negozi | D283 | 232 |
Sviluppando | D283 | 549 |
Tabella EMP_DEPT_MAPPING:
EMP_ID | EMP_DEPT |
---|---|
D394 | 283 |
D394 | 300 |
D283 | 232 |
D283 | 549 |
Dipendenze funzionali:
EMP_ID → EMP_COUNTRY EMP_DEPT → {DEPT_TYPE, EMP_DEPT_NO}
Chiavi del candidato:
Per la prima tabella: EMP_ID
Per la seconda tabella: EMP_DEPT
Per la terza tabella: {EMP_ID, EMP_DEPT}
Ora, questo è in BCNF perché la parte sinistra di entrambe le dipendenze funzionali è una chiave.