- BCNF, 3NF'nin gelişmiş versiyonudur. 3NF'den daha katıdır.
- Her fonksiyonel bağımlılık X → Y, X, tablonun süper anahtarı ise, bir tablo BCNF'dedir.
- BCNF için tablo 3NF olmalıdır ve her FD için LHS süper anahtardır.
Örnek: Çalışanların birden fazla departmanda çalıştığı bir şirket olduğunu varsayalım.
java char'ı string'e çevirir
ÇALIŞAN tablosu:
| EMP_ID | EMP_COUNTRY | EMP_DEPT | DEPT_TYPE | EMP_DEPT_NO |
|---|---|---|---|---|
| 264 | Hindistan | Tasarım | D394 | 283 |
| 264 | Hindistan | Test yapmak | D394 | 300 |
| 364 | İngiltere | Mağazalar | D283 | 232 |
| 364 | İngiltere | gelişen | D283 | 549 |
Yukarıdaki tabloda İşlevsel bağımlılıklar aşağıdaki gibidir:
EMP_ID → EMP_COUNTRY EMP_DEPT → {DEPT_TYPE, EMP_DEPT_NO} Aday anahtarı: {EMP-ID, EMP-DEPT}
Tablo BCNF'de değil çünkü ne EMP_DEPT ne de EMP_ID tek başına anahtar değil.
Verilen tabloyu BCNF'ye dönüştürmek için onu üç tabloya ayırıyoruz:
EMP_COUNTRY tablosu:
| EMP_ID | EMP_COUNTRY |
|---|---|
| 264 | Hindistan |
| 264 | Hindistan |
EMP_DEPT tablosu:
| EMP_DEPT | DEPT_TYPE | EMP_DEPT_NO |
|---|---|---|
| Tasarım | D394 | 283 |
| Test yapmak | D394 | 300 |
| Mağazalar | D283 | 232 |
| gelişen | D283 | 549 |
EMP_DEPT_MAPPING tablosu:
| EMP_ID | EMP_DEPT |
|---|---|
| D394 | 283 |
| D394 | 300 |
| D283 | 232 |
| D283 | 549 |
İşlevsel bağımlılıklar:
EMP_ID → EMP_COUNTRY EMP_DEPT → {DEPT_TYPE, EMP_DEPT_NO} Aday anahtarları:
İlk tablo için: EMP_ID
İkinci tablo için: EMP_DEPT
Üçüncü tablo için: {EMP_ID, EMP_DEPT}
Şimdi, bu BCNF'de çünkü her iki işlevsel bağımlılığın da sol kısmı bir anahtardır.