logo

Boyce Codd normal form (BCNF)

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