BCNF (Boyce Codd Normal Form)

Yazan : Şadi Evren ŞEKER

Veritabanı tasarım şekillerinden birisi olan BCNF, üçüncü normal şekil ile (third normal form, 3NF) karşılaştıırlabilir. Yapı olarak normal şekillerde üst sayıdaki normal şekiller, alt normal şekilleri kapsar. Yani 2. normal şekilde olan bütün veri tabanı tasarımları 1. normal şekilde ve benzer şekilde 3. normal şekilde olan bütün veri tabanı tasarımları 2. normal şekilde kabul edilebilir.

Bu durumda BCNF şeklinde olan veritabanı tasarımları da 1. , 2. ve 3. normal şekillerin şartlarını sağlamak zorundadır.

BCNF ile3NF arasındaki farkı şu şekilde açıklayabiliriz:

Veri tabanı tasarımında A → B şeklinde bir functional bağlılık bulunuyorsa (functional dependency), bu bağımlılıktaki B birincil anahtar olmak zorundadır. 3NF tasarımında A anahtarı bir aday anahtar (candidate key) olmak zorunda değildir ancak BCNF şeklinde bunun tersine A →  B şeklindeki bir fonksiyonel bağımlılık durumunda A bir aday anahtar olmalıdır.

Bu durumu aşağıdaki örnek üzerinden anlamaya çalışalım. Örneğin 3. normal şekilde olan aşağıdaki tabloyu ele alalım:

Müşteri No Görüşme Tarihi Görüşme saati Personel No Oda No
CR76 13-May-09 10.30 SG5 B301
CR76 13-May-09 12.00 SG5 B301
CR74 13-May-09 12.00 SG37 B302
CR56 1-Haz-09 10.30 SG5 B302

Yukarıdaki tablodaki fonksiyonel bağımlılıklar aşağıdaki şekilde sıralanabilir:

  1. FD1   “Müşteri No”, “Görüşme Tarihi” → “Görüşme Saati”, “Personel No”, “Oda No”      (Birincil Anahtar, Primary Key)
  2. FD2   “Personel No”, “Görüşme Tarihi”, “Görüşme Saati” →  “Müşteri No”         (Adah Anahtar, Candidate key)
  3. FD3   “Oda No”, “Görüşme Tarihi”, “Görüşme Saati” → “Müşteri No”, “Personel No”     (Aday Anahtar, Candidate key)
  4. FD4   “Personel No”, “Görüşme Tarihi” → “Oda No”     (Aday anahtar DEĞILDIR)

Yukarıdaki fonksiyonel bağımlılıklardan 4.’sü bir aday anahtar değildir. Dolayısıyla veri bütünlüğü (data integrity) açısından sorun olabilir. Örneğin herhangi bir personel için oda değişikliği veri tabanından birden fazla değişikliğin kontrolünü gerektirir.

Örneğin SG5 personeli, B301 odasındadır, bu personelin odasının değişmesi durumunda veri tabanında ya veri bütünlüğü sorunu olur ya da birden fazla erişim gerekir.

Bu sorunun çözümü olarak BCNF şeklinde olan aşağıdaki iki tabloya bölünmesi gerekir:

Müşteri No Görüşme Tarihi Görüşme saati Personel No
CR76 13-May-09 10.30 SG5
CR76 13-May-09 12.00 SG5
CR74 13-May-09 12.00 SG37
CR56 1-Haz-09 10.30 SG5

ikinci bir tablo ile de toplantılar tutulabilir:

Personel No Görüşme Tarihi Oda No
SG5 13-May-09 B301
SG37 13-May-09 B302
SG5 1-Haz-09 B302

Yorumlar

  1. bcnf

    Hocam ,FD’leri neye göre yazdığınızı söyleyebilir misiniz? A->B bağımlılığında B primary key olmak zorunda ve aynı bağımlılıkta A nın aday anahtar olma zorunluluğu var mı? c->d bağlılığında c aday anahtar olmak zorunda ve yine d nin primary key olma zorunluluğu var mı?Yoksa primary key ve aday anahtar birbirine bağımlı olamıyor mu? Normalizasyonun her türünde FD’leri tablodan nasıl çıkaracağımızı bilmiyoruz.Şimdiden teşekkür ederim.

  2. Döndü Ahu DOĞAN

    hocam örnekteki tabloda oda no ile görüşme saati bilgileri primary key olarak yeterli değil midir?

  3. Ahmet TOHMA

    Hocam Filemaker hakkında bilgi verebilir misiniz…

    adamlar farklı ilişki şekilleri kullanıyorlar.
    Anchor buoy
    self join
    nedir bunlar

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir