logo

Postać normalna Boyce'a Codda (BCNF)

  • BCNF to zaawansowana wersja 3NF. Jest bardziej rygorystyczny niż 3NF.
  • Tabela jest w BCNF, jeśli każda zależność funkcjonalna X → Y, X jest superkluczem tabeli.
  • Dla BCNF tabela powinna być w 3NF, a dla każdego FD, LHS jest super kluczem.

Przykład: Załóżmy, że istnieje firma, w której pracownicy pracują w więcej niż jednym dziale.

kody kolorów Java

Tabela PRACOWNIK:

EMP_ID EMP_KRAJ EMP_DEPT DEPT_TYPE EMP_DEPT_NO
264 Indie Projektowanie D394 283
264 Indie Testowanie D394 300
364 Wielka Brytania Sklepy D283 232
364 Wielka Brytania Rozwój D283 549

W powyższej tabeli zależności funkcjonalne przedstawiają się następująco:

 EMP_ID → EMP_COUNTRY EMP_DEPT → {DEPT_TYPE, EMP_DEPT_NO} 

Klucz kandydata: {EMP-ID, EMP-DEPT}

Tabela nie znajduje się w BCNF, ponieważ ani sam EMP_DEPT, ani EMP_ID nie są kluczami.

Aby przekonwertować podaną tabelę na BCNF, rozkładamy ją na trzy tabele:

Tabela EMP_COUNTRY:

EMP_ID EMP_KRAJ
264 Indie
264 Indie

Tabela EMP_DEPT:

EMP_DEPT DEPT_TYPE EMP_DEPT_NO
Projektowanie D394 283
Testowanie D394 300
Sklepy D283 232
Rozwój D283 549

Tabela EMP_DEPT_MAPPING:

EMP_ID EMP_DEPT
D394 283
D394 300
D283 232
D283 549

Zależności funkcjonalne:

 EMP_ID → EMP_COUNTRY EMP_DEPT → {DEPT_TYPE, EMP_DEPT_NO} 

Klucze kandydata:

Dla pierwszej tabeli: EMP_ID
Dla drugiej tabeli: EMP_DEPT
Dla trzeciej tabeli: {EMP_ID, EMP_DEPT}

To jest w BCNF, ponieważ lewa część obu zależności funkcjonalnych jest kluczem.