- BCNF є попередньою версією 3NF. Це суворіше, ніж 3NF.
- Таблиця знаходиться в BCNF, якщо кожна функціональна залежність X → Y, X є суперключем таблиці.
- Для BCNF таблиця має бути в 3NF, а для кожного FD LHS є суперключем.
приклад: Припустімо, що є компанія, де співробітники працюють більш ніж в одному відділі.
об'єкт для jsonobject java
Таблиця СПІВРОБІТНИК:
EMP_ID | EMP_COUNTRY | EMP_DEPT | DEPT_TYPE | EMP_DEPT_NO |
---|---|---|---|---|
264 | Індія | Проектування | D394 | 283 |
264 | Індія | Тестування | D394 | 300 |
364 | Великобританія | Магазини | D283 | 232 |
364 | Великобританія | Розвиток | D283 | 549 |
У таблиці вище функціональні залежності:
EMP_ID → EMP_COUNTRY EMP_DEPT → {DEPT_TYPE, EMP_DEPT_NO}
Ключ кандидата: {EMP-ID, EMP-DEPT}
Таблиця не знаходиться в BCNF, оскільки ні EMP_DEPT, ні EMP_ID самі по собі не є ключами.
Щоб перетворити дану таблицю в BCNF, розкладемо її на три таблиці:
Таблиця EMP_COUNTRY:
EMP_ID | EMP_COUNTRY |
---|---|
264 | Індія |
264 | Індія |
Таблиця EMP_DEPT:
EMP_DEPT | DEPT_TYPE | EMP_DEPT_NO |
---|---|---|
Проектування | D394 | 283 |
Тестування | D394 | 300 |
Магазини | D283 | 232 |
Розвиток | D283 | 549 |
Таблиця EMP_DEPT_MAPPING:
EMP_ID | EMP_DEPT |
---|---|
D394 | 283 |
D394 | 300 |
D283 | 232 |
D283 | 549 |
Функціональні залежності:
EMP_ID → EMP_COUNTRY EMP_DEPT → {DEPT_TYPE, EMP_DEPT_NO}
Ключі кандидатів:
Для першої таблиці: EMP_ID
Для другої таблиці: EMP_DEPT
Для третьої таблиці: {EMP_ID, EMP_DEPT}
Тепер це в BCNF, оскільки ліва частина обох функціональних залежностей є ключем.