logo

Boyce Codd normal form (BCNF)

  • BCNF er forhåndsversjonen av 3NF. Det er strengere enn 3NF.
  • En tabell er i BCNF hvis hver funksjonell avhengighet X → Y, X er supernøkkelen til tabellen.
  • For BCNF bør tabellen være i 3NF, og for hver FD er LHS supernøkkel.

Eksempel: La oss anta at det er et selskap der ansatte jobber i mer enn én avdeling.

typescript datotype

ANSATTEtabell:

EMP_ID EMP_COUNTRY EMP_DEPT DEPT_TYPE EMP_DEPT_NO
264 India Designing D394 283
264 India Testing D394 300
364 Storbritannia Butikker D283 232
364 Storbritannia Utvikler D283 549

I tabellen ovenfor er funksjonelle avhengigheter som følger:

 EMP_ID → EMP_COUNTRY EMP_DEPT → {DEPT_TYPE, EMP_DEPT_NO} 

Kandidatnøkkel: {EMP-ID, EMP-DEPT}

Tabellen er ikke i BCNF fordi verken EMP_DEPT eller EMP_ID alene er nøkler.

For å konvertere den gitte tabellen til BCNF, dekomponerer vi den i tre tabeller:

EMP_COUNTRY tabell:

EMP_ID EMP_COUNTRY
264 India
264 India

EMP_DEPT-tabell:

EMP_DEPT DEPT_TYPE EMP_DEPT_NO
Designing D394 283
Testing D394 300
Butikker D283 232
Utvikler D283 549

EMP_DEPT_MAPPING tabell:

EMP_ID EMP_DEPT
D394 283
D394 300
D283 232
D283 549

Funksjonelle avhengigheter:

 EMP_ID → EMP_COUNTRY EMP_DEPT → {DEPT_TYPE, EMP_DEPT_NO} 

Kandidatnøkler:

For det første bordet: EMP_ID
For det andre bordet: EMP_DEPT
For det tredje bordet: {EMP_ID, EMP_DEPT}

Nå er dette i BCNF fordi venstre side del av begge funksjonelle avhengigheter er en nøkkel.