- BCNF er den avancerede version af 3NF. Det er strengere end 3NF.
- En tabel er i BCNF, hvis hver funktionel afhængighed X → Y, X er tabellens supernøgle.
- For BCNF skal tabellen være i 3NF, og for hver FD er LHS supernøgle.
Eksempel: Lad os antage, at der er en virksomhed, hvor medarbejdere arbejder i mere end én afdeling.
java8 funktioner
MEDARBEJDER tabel:
EMP_ID | EMP_COUNTRY | EMP_DEPT | DEPT_TYPE | EMP_DEPT_NO |
---|---|---|---|---|
264 | Indien | Design | D394 | 283 |
264 | Indien | Afprøvning | D394 | 300 |
364 | Storbritannien | Butikker | D283 | 232 |
364 | Storbritannien | Udvikler | D283 | 549 |
I ovenstående tabel er funktionelle afhængigheder som følger:
EMP_ID → EMP_COUNTRY EMP_DEPT → {DEPT_TYPE, EMP_DEPT_NO}
Kandidatnøgle: {EMP-ID, EMP-DEPT}
Tabellen er ikke i BCNF, fordi hverken EMP_DEPT eller EMP_ID alene er nøgler.
For at konvertere den givne tabel til BCNF opdeler vi den i tre tabeller:
EMP_COUNTRY tabel:
EMP_ID | EMP_COUNTRY |
---|---|
264 | Indien |
264 | Indien |
EMP_DEPT tabel:
EMP_DEPT | DEPT_TYPE | EMP_DEPT_NO |
---|---|---|
Design | D394 | 283 |
Afprøvning | D394 | 300 |
Butikker | D283 | 232 |
Udvikler | D283 | 549 |
EMP_DEPT_MAPPING tabel:
EMP_ID | EMP_DEPT |
---|---|
D394 | 283 |
D394 | 300 |
D283 | 232 |
D283 | 549 |
Funktionelle afhængigheder:
EMP_ID → EMP_COUNTRY EMP_DEPT → {DEPT_TYPE, EMP_DEPT_NO}
Kandidatnøgler:
For det første bord: EMP_ID
For det andet bord: EMP_DEPT
For det tredje bord: {EMP_ID, EMP_DEPT}
Nu er dette i BCNF, fordi venstre side del af begge de funktionelle afhængigheder er en nøgle.