logo

Boyce Codd normale vorm (BCNF)

  • BCNF is de geavanceerde versie van 3NF. Het is strenger dan 3NF.
  • Een tabel bevindt zich in BCNF als elke functionele afhankelijkheid X → Y, X de supersleutel van de tabel is.
  • Voor BCNF moet de tabel in 3NF zijn, en voor elke FD is LHS supersleutel.

Voorbeeld: Laten we aannemen dat er een bedrijf is waar werknemers op meer dan één afdeling werken.

kat timpf gewicht

WERKNEMER tabel:

EMP_ID EMP_COUNTRY EMP_DEPT DEPT_TYPE EMP_DEPT_NO
264 Indië Ontwerpen D394 283
264 Indië Testen D394 300
364 Groot-Brittannië Winkels D283 232
364 Groot-Brittannië Ontwikkelen D283 549

In de bovenstaande tabel zijn de functionele afhankelijkheden als volgt:

 EMP_ID → EMP_COUNTRY EMP_DEPT → {DEPT_TYPE, EMP_DEPT_NO} 

Kandidaatsleutel: {EMP-ID, EMP-DEPT}

De tabel bevindt zich niet in BCNF omdat noch EMP_DEPT, noch EMP_ID alleen sleutels zijn.

Om de gegeven tabel naar BCNF te converteren, ontleden we deze in drie tabellen:

EMP_COUNTRY tabel:

EMP_ID EMP_COUNTRY
264 Indië
264 Indië

EMP_DEPT tabel:

EMP_DEPT DEPT_TYPE EMP_DEPT_NO
Ontwerpen D394 283
Testen D394 300
Winkels D283 232
Ontwikkelen D283 549

EMP_DEPT_MAPPING tabel:

EMP_ID EMP_DEPT
D394 283
D394 300
D283 232
D283 549

Functionele afhankelijkheden:

 EMP_ID → EMP_COUNTRY EMP_DEPT → {DEPT_TYPE, EMP_DEPT_NO} 

Kandidaat sleutels:

Voor de eerste tafel: EMP_ID
Voor de tweede tabel: EMP_DEPT
Voor de derde tabel: {EMP_ID, EMP_DEPT}

Dit is nu in BCNF omdat het linkergedeelte van beide functionele afhankelijkheden een sleutel is.