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