logo

Boyce Codd normal form (BCNF)

  • BCNF är den avancerade versionen av 3NF. Det är strängare än 3NF.
  • En tabell är i BCNF om varje funktionellt beroende X → Y, X är tabellens supernyckel.
  • För BCNF bör tabellen vara i 3NF, och för varje FD är LHS supernyckel.

Exempel: Låt oss anta att det finns ett företag där anställda arbetar på mer än en avdelning.

hur man öppnar en fil med java

ANSTÄLLDA tabell:

EMP_ID EMP_COUNTRY EMP_DEPT DEPT_TYPE EMP_DEPT_NO
264 Indien Design D394 283
264 Indien Testning D394 300
364 Storbritannien Butiker D283 232
364 Storbritannien Utvecklande D283 549

I tabellen ovan är funktionella beroenden följande:

 EMP_ID → EMP_COUNTRY EMP_DEPT → {DEPT_TYPE, EMP_DEPT_NO} 

Kandidatnyckel: {EMP-ID, EMP-DEPT}

Tabellen är inte i BCNF eftersom varken EMP_DEPT eller EMP_ID enbart är nycklar.

För att konvertera den givna tabellen till BCNF, delar vi upp den i tre tabeller:

EMP_COUNTRY tabell:

EMP_ID EMP_COUNTRY
264 Indien
264 Indien

EMP_DEPT tabell:

EMP_DEPT DEPT_TYPE EMP_DEPT_NO
Design D394 283
Testning D394 300
Butiker D283 232
Utvecklande D283 549

EMP_DEPT_MAPPING tabell:

EMP_ID EMP_DEPT
D394 283
D394 300
D283 232
D283 549

Funktionella beroenden:

 EMP_ID → EMP_COUNTRY EMP_DEPT → {DEPT_TYPE, EMP_DEPT_NO} 

Kandidatnycklar:

För det första bordet: EMP_ID
För det andra bordet: EMP_DEPT
För det tredje bordet: {EMP_ID, EMP_DEPT}

Nu är detta i BCNF eftersom den vänstra delen av båda de funktionella beroendena är en nyckel.