Normalizasyon
İlişkisel veritabanını verimli bir şekilde kullanmak için tekrarlı verileri ve çoktan çoğa ilişkileri en aza indirmek gerekir. Bu amaçla veritabanındaki tablolar düzenli hale getirilir. Bu işleme normalizasyon denilmektedir.
Normalizasyon çok fazla sayıda alan ve kayıtlardan oluşan tabloların tekrarlı verilerden arındırılarak başka tabloların oluşturulması işlemidir. Burada amaç, tablolardan kayıt silme işleminden kaynaklı veri kayıplarını, ve gereksiz yere tabloya kayıt eklemekten kaynaklanan veri tekrarını önlemektir.
Bu işlem, ilişkisel veritabanı modelinin mantıksal tasarım aşamasında uygulanır.
Normalizasyon aşamaları:
•
Birinci Normal Form
•
İkinci Normal Form
•
Üçüncü Normal Form
•
Boyce-Codd Normal Formu
•
Dördüncü Normal Form
Normal olamayan form
İlişkisel veri tabanı modelinin temel kuralına göre
bütün niteliklerin aldığı değerler atomik (tek ve basit) olmalıdır.
Aşağıdaki sipariş tablosu bu kurala uymamaktadır. Örneğin gönderi numarası ve miktar alanları girilirken tablodaki bir hücre birden fazla değer içermektedir, 1 nolu gönderinin miktarı 300, 2 nolu gönderinin miktarı 200 gibi değerler girilmiştir. Bu durum, veritabanı üzerinde sorgulama işlemi yapılmasını zorlaştıracaktır. Bir veritabanı tasarımı için normal bir durum değildir.
Birinci Normal Form
Bu tabloya Birinci Normal Form uygulandığında aşağıdaki şekilde bir tablo ortaya çıkar.
Ancak bu tabloya birinci normal form uygulandığında da şu sorunlar ortaya çıkmaktadır. Birinci normal formdaki bir tablo bazı
alanlarda tekrarlı verilere sahiptir. Örneğimizde şehir_kodu ve şehir_adı
alanlarında her müşteri için tekrarlı veriler vardır. Bu tekrarlar kayıt ekleme, silme ve güncelleme
işlemlerinde sorunlara neden olacaktır.
Örneğin bu tabloda yer almayan bir müşterinin bilgilerinin (müşteri_no,
şehir_kodu, şehir_adı) girilmesi için mutlaka o müşteriye bir sipariş işleminin
yapılması (gönderi_no ve miktar değerlerinin girilmiş olması) gerekiyor. Ama müşteri sipariş vermemiş olabilir, bu durumda müşteriyi kaydı gerçekleşmeyecek mi? Ya da müşteri bu tabloya kayıt olduğunda gönderi_no ve miktar alanları boş mu kalacak?
Diğer yandan bir müşteri için tek bir sipariş alındıysa (örn. 3 no’lu müşteri), o sipariş işlemi iptal edildiğinde, sadece gönderi_no ve miktarı değil, o siparişin yapıldığı müşteri hakkındaki diğer bilgiler de (müşteri_no, şehir_kodu, şehir_adı) yok olur. Ya da 1 numaralı müşteri Ankara’ya taşınırsa, bu müşteri ile ilgili tüm satırların güncellenmesi gerekecek. Eğer tablo çok büyük ise, sadece bir müşteri ile ilgili küçük bir değişiklik bile bir çok kaydın güncellenmesini gerektirebilir.
Yukarıda bahsedilen bu sorunlardan dolayı İkinci Normal Forma ihtiyaç duyulmuştur.
İkinci Normal Form
Birinci normal formdaki
sorunlardan kurtulmak için birinci normal form tabloları birden fazla tabloya dönüştürülerek ikinci normal forma ulaşılır. İkinci normal formda,
ilişkisel tablonun her bir anahtar olmayan sütunu birincil anahtara kısmi
bağımlı değil, tam işlevsel bağımlı olmalıdır.
Örneğin şehir_kodu ve şehir_adı
nitelikleri sadece müşteri_no
niteliği üzerinde tam işlevsel bağımlıdır. Bu durumda şehir_kodu ve şehir_adı nitelikleri müşteri_no ile beraber ayrı bir tablo
oluşturmalıdır.
Müşteriler Tablosu (müşteri_no,
şehir_kodu, şehir_adı)
Sipariş Tablosu (müşteri_no,
gönderi_no, miktar)
Birinci normal formdaki güncelleme sorununu ikinci
normal forma dönüştürme ile ortadan kaldırmış olsak ta, ikinci normal formda da
ekleme ve silme sorunları devam etmektedir.
Örneğin Müşteri tablosuna yeni bir müşteri kaydı girilmediği
sürece yeni bir şehir tanımı yapılamaz. İzmir'i tabloya dahil edebilmek
için İzmir’de bulunan bir müşteriye ihtiyaç vardır.
Diğer yandan bu tablodan bir müşteri silindiğinde, eğer o şehirdeki
tek müşteri ise şehir_kodu ve şehir_adı bilgileri de yok olacak.
Bu durumda üçüncü normal forma ihtiyaç duyulur.
Üçüncü Normal Form
Birinci normal formdaki sorunlardan kurtulmak için
nitelikler arasındaki kısmi işlevsel bağımlılıkları ortadan
kaldırdık. İkinci normal formdaki sorunlardan kurtulmak için de
nitelikler arasındaki geçişli işlevsel bağımlılıkları ortadan
kaldırmamız gerekir.
Örneğin “şehir_adı ®
şehir_kodu” işlevsel bağımlılığı geçişlidir. Bir anahtara
bağlı olmayan bu bağımlılığı ayrı bir tabloya dönüştürerek üçüncü normal formu elde edebiliriz.
Şehirler Tablosu (şehir_kodu, şehir_adı)
Müşteriler Tablosu (müşteri_no, şehir_kodu )
Sipariş Tablosu (müşteri_no, gönderi_no, miktar)
Bu veritabanı tasarımı için artık daha fazla normalizasyon kuralı uygulamaya gerek yoktur. Oluşturduğumuz son hali ile kullanılabilir.
Boyce-Codd Normal formunu ve Dördüncü Normal Formu anlatmak için başka bir örnek üzerinden devam edelim.
Boyce-Codd Normal Formu
Boyce-Codd Normal formu için aşağıdaki Öğrenci tablosunu inceleyelim. Bu tablo, birinci normal forma uygun, bütün niteliklerin aldığı değerler atomik yapıda. İkinci ve üçüncü normal forma da uygun; alanlar arasında kısmi veya geçici bağımlılık yok. Bu üç normal formu da sağladığına göre sorun nedir?
- Örneğin 456 numaralı öğrenci silinirse hem Biyoloji bölümü hem de danışman bilgisi yok olacak. Ya da bir öğrenci Matematik bölümüne kayıt olana kadar böyle bir bölüm olmayacak. Hadi varsa bu durumda ne yapmamız gerekir?
- Boyce-Codd normal formu uygulandığında ÖğrNo, danışman alanı için belirleyici anahtar yapılır, danışman ise bölüme kısmi bağımlıdır.
- Tablolar aşağıdaki gibi oluşturulsaydı danışman ile bölüm ÖğrNo'ya tam işlevsel bağımlı olur. Bu tür bağımlılığa çok değerli bağımlılık denilmektedir (Dördüncü Normal forma uygun)
Öğrenci_Bölüm Tablosu (Öğr_No, Bölüm)
Öğrenci_Danışman Tablosu (Öğr_No, Danışman)
Dördüncü Normal Form
Boyce-Codd normal formdaki bir ilişkide de sorunlar alabilir. Çok değerli bağımlılığın söz konusu olduğu aşağıdaki duruma bakalım.
Burada bir öğrenci birden çok bölüme kayıt
olabilmekte ve birden çok spor etkinliğine katılabilmektedir. Burada ÖğrNo ile Bölüm ve ÖğrNo ile
Spor arasındaki ilişkiler birer işlevsel bağımlılık değil çok-değerli
bağımlılıktır.
•
123 numaralı öğrencinin bir bölüme daha
kayıt olması yada bir spor etkinliğine daha katılması durumunda tablolara birer kayıt daha
ilave edilmelidir. Bunun gibi kayıt sorunlarını ortadan
kaldırmak için ÖĞRENCİ ilişkisi ikiye ayrılarak dördüncü normal form oluşturulur.
Aşağıdaki tablolar için normalizasyon kurallarını uygulayınız.
Verilen tablo Birinci Normal Formdadır (atomik
değerler).
–
OKUL (Ö.No, Ö.Ad, Ö.Soyad, Ders_No,
Ders_Adı, Vize, Final, H.No, H.Ad, H.Soyad)
İkinci Normal forma geçerken kısmi bağımlılıklar ortadan
kaldırılır.
–
NOTLAR(Ö.No, Ders_No,
Vize, Final)
–
ÖĞRENCİLER(Ö.No, Ö.Ad, Ö.Soyad)
–
DERSLER(Ders_No, Ders_Adı, H.No,
H.Ad, H.Soyad)
Üçüncü Normal forma geçerken geçişli
bağımlılıklar ortadan kaldırılır.
–
NOTLAR(Ö.No, Ders_No,
Vize, Final)
–
ÖĞRENCİLER(Ö.No, Ö.Ad, Ö.Soyad)
–
DERSLER(Ders_No, Ders_Adı, H.No)
–
HOCALAR(H.No, H.Ad, H.Soyad)
Verilen tablo Birinci Normal Formdadır (atomik değerler).
– Urun_Parca (UrunNo, UrunAd, ParcaNo,
ParcaAd, Miktar, UreticiNo, UreticiAd, UreticiSehir, UreticiTel)
İkinci Normal forma geçerken kısmi bağımlılıklar ortadan kaldırılır.
–
Urun_Parca (UrunNo, ParcaNo,
ParcaAd, Miktar)
–
Urunler (UrunNo, UrunAd,
UreticiNo, UreticiAd, UreticiSehir, UreticiTel)
Üçüncü Normal forma geçerken geçişli bağımlılıklar ortadan kaldırılır.
–
Urun_Parca (UrunNo, ParcaNo,
ParcaAd, Miktar)
–
Urunler (UrunNo, UrunAd,
UreticiNo)
–
Ureticiler (UreticiNo, UreticiAd,
UreticiSehir, UreticiTel)
Verilen tablo Birinci Normal Formdadır (atomik değerler).
– SIPARIS
(SiparisNo, Tarih, UrunAd, UrunNo, Adet, MusNo, MusAd, MusSoyad)
İkinci Normal forma geçerken kısmi bağımlılıklar ortadan kaldırılır.
– SIPARIS_URUN
(SiparisNo, UrunNo, Adet)
– SIPARIS_MUSTERI
(SiparisNo, Tarih, MusNo, MusAd, MusSoyad)
– URUN
(UrunNo, UrunAd)
Üçüncü Normal forma geçerken geçişli bağımlılıklar ortadan kaldırılır.
– SIPARIS_URUN
(SiparisNo, UrunNo, Adet)
– SIPARIS_
MUSTERI (SiparisNo, Tarih, MusNo)
– MUSTERILER
(MusNo, MusAd, MusSoyad)
– URUN
(UrunNo, UrunAd)













Yorumlar
Yorum Gönder