Bu örneği anlayabilmek için bilinmesi gerekenler:
1. Birincil Anahtar: Tablodaki her alana erişimi sağlayabilen alandır.Her satır için
özeldir. Satırlarda tekrar etmez. Örneğin musteri(uyeno ,isim,adres)
tablosunda birincil anahtar uye no’dur. Uyeno’su bilinen bir müşterinin isim ve
adresine erişilebilir.
2. Bileşik Anahtar: Bir tablodaki birincil anahtar, birden fazla alandan oluşuyor ise
bu anahtar bileşik anahtardır.
Örneğin bu tabloda bölümno ve dersno birlikte birincil anahtardır. Neden? Çünkü
bölümno her satır için tek değildir, başka satırlarda tekrar ediyor. Aynı şekilde DersNo
‘da.
3. Aday Anahtar: Birincil Anahtar dışındaki ve ya birincil anahtarla birlikte tablonun
alanlarına erişimi sağlayan alanlara denir.
Aday Anahtar
Birincil
Anahtar
Aşağıdaki tabloda birincil anahtar ogr_no’dur. Fakat (ogr_no,ogr_name) ile de tüm
tablodaki alanlara erişilebilir. Dolayısıyla (ogr_no,ogr_name) bir aday anahtardır. Ya
da (kimlik_no,bolum) ile de tablonun diğer alanlarına erişilebilir. Dolayısıyla
(kimlik_no,bolum) ‘de bir aday anahtardır.
4.
Fonksiyonel Bağımlılık: Bir tablo içindeki erişim ilişkilerinin gösterilmesidir.
Örneğin, bir tabloda öğrencinin numarasını bilerek öğrencinin adına ulaşabiliryor
isek,
Ögrencino  ogrenci_adi
şeklinde bağımlılık belirtilir.
5. Kısmı bağımlılık
Bileşik anahtara sahip olan tablolarda, eğer bileşik anahtarın bir parçası tablonun
diğer alanlarından bazılarına erişimi sağlayabiliyor ise Bu tabloda kısmı bağımlılık
vardır.
6. Dolaylı Bağımlılık
Eğer birincil anahtar dışındaki bir alan tablodaki başka bir alana erişim sağlıyor ise, bu
tabloda dolaylı bağımlılık vardır. Aşağıdaki tabloda, Danışmanı bilirsek oda numarasını da
bilebiliyoruz ve danışman alanı birincil anahtar değil. Dolayısıyla dolaylı bağımlılık vardır.
Normalizasyon Örnek
Senaryo: Bir film arşivimiz var ve bu filmleri kiralıyoruz. Her film için başlık,
yönetmen ve seri numarası vardır. Müşterilerin ismi, adresi ve üye
numarası vardır. Her filmden yalnız bir kopya vardır.
Aşağıdaki tablolar veriliyor. Altı çizgili olan alanlar birincil anahtarlardır.
film(baslik,yonetmen,serino)
musteri(uyeno ,isim,adres)
kira(uyeno,serino,tarih)
Bu tablolar üzerindeki fonksiyonel bağımlılıklar da şu şekilde verilmiştir:
baslik->yonetmen,serino
serino->baslik
serino->yonetmen
isim,adres -> uyeno
uyeno -> isim,adres
serino,tarih -> uyeno
 Hangi Normal formdadır?
Tekrar eden bir sütun yoktur. Dolayısıyla 1NF’dir.
( Eğer bir tablo şu şekilde olsaydı NF1’e uygun olmazdı.
film(baslik,yonetmen1,yonetmen2,serino)
)
 2NF?
Tablolarda kısmi bağımlılık var mı diye bakmalıyız. Kısmi bağımlılık
da bileşik anahtarı olan tablolarda görülebilir.
Kira tablosunda birleşik anahtar vardır – (serino, tarih ) . Detaylı
inceleyelim:
uyeno sadece serino veya sadece tarih ile buluna bilir mi? Yani
uyeno  serino veya uyeno tarih midir?
HAYIR. Dolayısıyla 2NF’dir. Yani tablolarda kısmi bağımlılık yoktur.
(Eğer fonksiyonel bağımlılıklar arasında uyeno
 serino veya uyeno tarih
verilseydi kira tablosunda kısmi bağımlılık var olacaktı. Dolayısıyla 2.NF uygun
olmayacaktı. Tabloyu bölmek zorunda olacaktık.
VEYA
kira tablosu aşağıdaki şekilde olsaydı
kira(xxx,uyeno,serino,tarih)
ve fonksiyonel bağımlılıkta serino --> xxx
olsaydı NF2 olmazdı.
Tabloyu ikiye ayırmamız gerekecekti yenitablo(serino,xxx) ve
kira(uyeno,serino,tarih) şeklinde.)
 3NF? Tablolarda dolaylı bağımlılık var mı diye bakarız.
Serino bilindiğinde yonetmen bilinebiliyor yani (serino->yonetmen )
dolayısıyla film tablosunda dolaylı bağımlılık vardır. 3NF değildir.
2NF ‘den 3NF’ye geçmek için dolaylı bağımlılığı kaldırmak gereklidir:
Tabloları yeniden düzenleyelim:
film(baslik,yonetmen,serino)tablosu ikiye bölünür:
film(baslik,serino)
serino_yonetmen(serino,yonetmen)
Dolayısıyla son durum şu şekilde olur:
film(baslik,serino)
serino_yonetmen (serino,yonetmen)
musteri(isim,adres,uyeno)
kira(uyeno,serino,tarih)
 BCNF? Her fonksiyonel bağımlılık bir aday anahtar mıdır diye
bakarız.
(Her birincil anahtar bir aday anahtardır. Yani Aday Anahtarlar kümesi
birincil anahtarlar kümesini kapsar.)
film(baslik,serino)
fonksiyonel bağımlılıklar:
baslik->yonetmen,serino
serino->baslik
film tablosu BCNF’dir.
(birincil anahtar) aday anahtar
aday anahtar
serino_yonetmen (serino,yonetmen)
fonksiyonel bağımlılıklar:
serino->yonetmen
(birincil anahtar)aday anahtar
serino_yonetmen tablosu BCNF’dir.
musteri(isim,adres,uyeno)
fonksiyonel bağımlılıklar:
isim,adres -> uyeno
aday anahtar
uyeno -> isim,adres
(birincil anahtar)aday anahtar
musteri tablosu BCNF’dir.
kira(uyeno,serino,tarih)
fonksiyonel bağımlılıklar:
serino,tarih -> uyeno
(birincil anahtar)aday anahtar
kira tablosu BCNF’dir.
Download

Normalizasyon1-2-3