İkinci Normal Şekil (Second Normal Form) 2NF

Yazan : Şadi Evren ŞEKER

Veri tabanı teorisinde geçen ve ilişkisel bir veri tabanının hafızayı daha verimli kullanması (daha az yer kaplaması) için geliştirilen normal şekillerden ikincisidir. Teorik olarak ikinci normal şekilde olan bütün veri tabanı tasarımları ilk normal şekle (first normal form , 1NF) de uymaktadır.

Bir veri tabanı tasarlanırken normal formda olması göz önüne alınabilir veya daha sonradan normalleştirilebilir (nomalization). Bu sayede veri tabanının daha az yer kaplaması sağlanmış olur. Ancak bazı durumlarda yerden fedakarlık yapılarak hız ön plana çıkar. Bu durumda normalleştirilmiş bir veritabanının bozulması (denormalization) gerekir.

ikinci normal formun ilk normal form üzerinde tek kuralı vardır. O da aday anahtar (candidate key) olarak tanımlanabilecek bir anahtara bütün diğer kolonların tam bağlı olması ve herhangi bir alt kümesine bağlı olmamasıdır.

Örneğin aşağıdaki tabloyu ele alalım:

İsim Soyisim Yaş Kısım Dahili Tel
Ali Baba 50 Muhasebe 148
Cem Yıldız 40 Bilgi İşlem 147
Şadi Evren ŞEKER 30 Bilgi İşlem 147
Veli Demir 20 Bilgi İşlem 147

Yukarıda tek tabloda gösterilen kolonları inceleyelim. isim, soyisim ve yaş bilgileri kişiye ait bilgiler iken Kısım ve dahili tel kolonları kişinin çalıştığı kısma ait bilgilerdir. Bu durumda, yukarıdaki tabloda, isim soy isim ve yaş bilgilerinden bir anahtar elde etmek mümkündür.

Key(isim,soyisim,yaş) şeklinde bir tanım yapabiliriz ve diyebiliriz ki aynı isme sahip veya aynı soyisme sahip kişiler bile olabilir ama aynı isim, aynı soyisim ve aynı yaşa sahip kimse olamaz.

Bu durumda tablomuzdaki bütün verileri eşsiz olarak tanımlayan bir anahtarımız var demektir (uniquely identify).

Yukarıdaki bu yaklaşım doğru olmakla birlikte, birden fazla kolondan oluşan anahtarların indeksleme açısından problemleri olabilmektedir. Yani bu veriler üzerinde sürekli işlem yapıldığı (veri arandığı, sıralandığı vs.) düşünülürse, anahtarın basit olması faydalıdır.

Ayrıca farklı tablolardan bu tabloya erişimi sırasında, iki tabloyu bağlamak için iki tabloda ortak bulunan bir anahtara ihtiyaç vardır. Tablodaki anahtar yapısının karmaşıklığı bu tip ilişkileri zorlaştırır.

Örneğin yukarıdaki yapıyı ikiye bölelim ve kısım ve dahili telefonu farklı bir tabloda ele alalım:

Çalışan Tablosu

İsim Soyisim Yaş
Ali Baba 50
Cem Yıldız 40
Şadi Evren ŞEKER 30
Veli Demir 20

Kısım Tablosu

Kısım Dahili Tel
Muhasebe 148
Bilgi İşlem 147

Görüldüğü üzere iki farklı tablo elde ettik. İlk tablodaki bütün kolonlar anahtar olarak seçilmişken ikinci tabloda dahili telefonu anahtar olarak seçebiliriz çünkü bir kısımda tek dahili numara bulunacağını ve aynı dahiliye birden fazla kısmın sahip olamayacağını biliyoruz. (veya kabul ediyoruz)

Bu durumda çalışan tablosu ile kısım tablosu arasında ilişki kurmak için çalışanların hangi kısımda olduğunun bilgisi tutulmalıdır:

 İsim Soyisim Yaş Kısım
Ali Baba 50 148
Cem Yıldız 40 147
Şadi Evren ŞEKER 30 147
Veli Demir 20 147

Yukarıdaki yeni haliyle, daha öncede yaşadığımız problemi çözüyoruz. Önceki haliyle, kimin hangi kısımda mesai yaptığını bilmiyorduk. Artık herkesin kısmı belli oldu. Son olarak yaşadığımız problem, bu tablodaki anahtar tanımının doğru olmakla birlikte en iyi (optimum) olmamasıdır.

Bunun sebebi, örneğin “Veli, Demir, 20” kayıtlı kişinin kısmını öğrenmek için tablodaki 3 farklı kolonun aranması ve karşılaştırılmasıdır.

Çözüm olarak ilave bir anahtar kolonu ekleyip eşsiz tanımlama görevini bu kolona eklemek sıklıkla kullanlan bir iyileştirmedir (optimisation)

Anahtar  İsim Soyisim Yaş Kısım
1 Ali Baba 50 148
2 Cem Yıldız 40 147
3 Şadi Evren ŞEKER 30 147
4 Veli Demir 20 147

Son haliyle tabolumuzun ahatarı, yukarıdaki anahtar ismi ile ifade edilen kolon olmuş olur. Ayrıca kısım kolonu da yabancı anahtar (foreign key) olarak ifade edilir ve bu kolon aslında diğer bir tabloda (kısım tablosu) anahtar olan bir kolondur.

Bu sayede tablolar arasında birleştirme (join) yapılabilir.

Yorumlar

  1. servet

    yaw Allah razı olsun sizden.yarın sınav var hiç bişey anlamamıştım ders notlarından.Şimdi kafamda biraz şekillendi.ama arkadaşın dediği gibi yazınız eksik galiba bu bölümde.

  2. Şadi Evren ŞEKER Article Author

    evet yazı eksikti, aslında tam yayınlamıştım ama sanırım veri tabanında bir hasar olmuş. Eksik konuları tamamlayarak güncelledim. Bu haliyle, sanırım konu daha anlaşılır olmuştur.
    ilginiz için teşekkürler.

    başarılar

  3. Utku

    Merhaba Hocam,
    3NF' nin 2NF' den farkını bir fonksiyonel bağımlılık olarak ifade etmiştiniz ama burada da bir fonksiyonel bağımlılık yok mu? Örneğin bana göre Kısım tablosunda 'dahili' sütunu 'kısım' sütununa bağımlı, aynı zamanda Çalışan tablosunda 'kısım' sütunu da 'ad','soyad','yas' aday anahtarına bağlı. Bu fonksiyonel bağımlılıklar 3NF olması için yeterli değil mi?
    Teşekkürler...

  4. Şadi Evren ŞEKER Article Author

    3NF "sadece anahtar" (nothing but key) 2NF ise "tamamen anahtar" (whole key) mantığı ile çalışır.

    Aslında 2NF'i şöyle düşünürseniz daha kolay anlaşılır. 1NF ile 3NF arasındaki farkı sanırım anlamak daha kolay. 2NF, 1NF'ten 3NF'e geçiş için ara bir koşuldur. Sadece anahtarın tamamen sağlandığını ve aday anaharın (candidate key) bir alt kümesi (subset) olmadığını sağlamaya uğraşır. Bu şart zaten 3NF için de beklenen bir durumdur ve 3NF anahtarın bir super anahtar (super key) olduğunu sorgular.

    Çok benzer bir soru 3NF yazısının altında yorum olarak sorulmuş oraya da benzer bir açıklama eklemeye çalıştım.

    Başarılar

  5. luffy

    "ikinci normal formun ilk normal form üzerinde tek kuralı vardır. O da aday anahtar (candidate key) olarak tanımlanabilecek bir anahtara bütün diğer kolonların tam bağlı olması ve herhangi bir alt kümesine bağlı olmamasıdır."
    yazmışsınız hocam. burada bütün aday anahtarları mı göz önüne alacaz yoksa seçtiğimiz bir tanesini(primary key) mi göz önüne alacaz?

    1. Şadi Evren ŞEKERŞadi Evren ŞEKER

      hepsi olmaz, bir tane anahtar bulmaya çalışıyoruz, birden fazla aday varsa bunlardan en sadesini (alt kümesi olmayanını) alabilirsiniz veya yeni bir anahtar kolonu ekleyebilirsiniz.

Bir Cevap Yazın

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


8 − üç =