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