logo

Boyce Codd formă normală (BCNF)

  • BCNF este versiunea avansată a 3NF. Este mai strict decât 3NF.
  • Un tabel este în BCNF dacă fiecare dependență funcțională X → Y, X este super-cheia tabelului.
  • Pentru BCNF, tabelul ar trebui să fie în 3NF și pentru fiecare FD, LHS este super-cheie.

Exemplu: Să presupunem că există o companie în care angajații lucrează în mai multe departamente.

câini de raft

Tabelul ANGAJATI:

EMP_ID EMP_COUNTRY EMP_DEPT DEPT_TYPE EMP_DEPT_NR
264 India Proiectare D394 283
264 India Testare D394 300
364 Regatul Unit Magazine D283 232
364 Regatul Unit în curs de dezvoltare D283 549

În tabelul de mai sus, dependențele funcționale sunt după cum urmează:

 EMP_ID → EMP_COUNTRY EMP_DEPT → {DEPT_TYPE, EMP_DEPT_NO} 

Cheie de candidat: {EMP-ID, EMP-DEPT}

Tabelul nu este în BCNF deoarece nici EMP_DEPT, nici EMP_ID nu sunt chei.

Pentru a converti tabelul dat în BCNF, îl descompunem în trei tabele:

Tabelul EMP_COUNTRY:

EMP_ID EMP_COUNTRY
264 India
264 India

Tabelul EMP_DEPT:

EMP_DEPT DEPT_TYPE EMP_DEPT_NR
Proiectare D394 283
Testare D394 300
Magazine D283 232
în curs de dezvoltare D283 549

Tabelul EMP_DEPT_MAPPING:

EMP_ID EMP_DEPT
D394 283
D394 300
D283 232
D283 549

Dependențe funcționale:

 EMP_ID → EMP_COUNTRY EMP_DEPT → {DEPT_TYPE, EMP_DEPT_NO} 

Cheile candidatului:

Pentru primul tabel: EMP_ID
Pentru al doilea tabel: EMP_DEPT
Pentru al treilea tabel: {EMP_ID, EMP_DEPT}

Acum, aceasta este în BCNF, deoarece partea stângă a ambelor dependențe funcționale este o cheie.