logo

Boyce Codd normal formu (BCNF)

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