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