logo

Forma normale di Boyce Codd (BCNF)

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