195 | | ==== |
| 195 | ==== BCNF правило: за секој FD X -> A во релацијата Ri, X мора да биде суперклуч на Ri. |
| 196 | |
| 197 | Ја проверуваме секоја релација произведена во 3NF: |
| 198 | |
| 199 | Users(user_id, ...) — FD лево од user_id е PK ⇒ BCNF. |
| 200 | |
| 201 | Hotel_Building(building_id, ...) — building_id е PK ⇒ BCNF. |
| 202 | |
| 203 | Room(room_number, building_id, ...) — (room_number, building_id) е сложен PK ⇒ BCNF. |
| 204 | |
| 205 | Staff(user_id, building_id) — user_id е PK ⇒ BCNF. |
| 206 | |
| 207 | Reservation(reservation_id, ...) — reservation_id е PK ⇒ BCNF. |
| 208 | |
| 209 | Service(service_id, ...) — service_id е PK ⇒ BCNF. |
| 210 | |
| 211 | Payment(reservation_id PK, ...) — reservation_id е PK ⇒ BCNF. |
| 212 | |
| 213 | Бидејќи секоја детерминанта во секоја релација е примарен клуч на релацијата (или суперклуч), секоја релација е во BCNF под овие избори на клучеви. |
| 214 | |
| 215 | Забелешка (компромис): BCNF декомпозицијата понекогаш може да ве принуди да изберете клуч кој не е најзгоден (на пр., ако Payment го воспостави p_id како PK, но reservation_id -> p_id постои, Payment би го прекршил BCNF — решивме со тоа што reservation_id го направивме PK за да го задоволиме BCNF без понатамошно декомпозиција). Ако претпочитате p_id како PK за да дозволите повеќекратни плаќања по резервација (1:N), тогаш p_id би бил детерминанта во Payment, а BCNF исто така важи. |
| 216 | |