Cemre Acar
Veritabanlarında Normalizasyon

Veritabanlarında Normalizasyon

Bu yazımda Normalizasyon'un ne olduğuna ve Normal Formlar'ın tablolar üzerinde örnekleri ile anlatımına değineceğim. İlk olarak Normalizasyon'un ne olduğuna bir bakalım. 
Normalizasyon, tabloları verilerin artıklığını ve bağımlılığını azaltacak şekilde düzenleyen bir veritabanı tasarım tekniğidir. Türkçeye normalleştirme olarak da geçen normalizasyon daha büyük tabloları daha küçük tablolara böler ve ilişkileri kullanarak tablolara bağlar. Peki bunu yapmamızın amacı nedir ?

Normalleştirmenin amacı, gereksiz verileri ortadan kaldırmak ve verilerin mantıksal olarak depolanmasını sağlamaktır. Bu yazıda yukarıda da belirttiğim gibi çeşitli örneklerle birlikte normalleştirme kurallarına değineceğim. Normalizasyonun kuralları normal form olarak adlandırılır. Normal Formların seviyesi arttıkça verimlilik ve tutarlılık artar, böylece veri tekrarına düşülmez.

Değineceğimiz konu başlıklarını sıralayacak olursak ;
- 1. Normal Form (1NF)
- 2. Normal Form (2NF)
- 3. Normal Form (3NF)
- Boyce-Codd Normal Form (BCNF)
- 4. Normal Form (4NF)


First Normal Form (1NF) :

Öncelikle şöyle bir tablomuz olsun. Bu tabloyu 1NF’ye nasıl çeviririz inceleyelim.

First Normal Form kurallarına göre ;
- Tekrarlanan alanlar ortadan kaldırılır.
- Her alanda tek değer bulunmalıdır.
 

Tabloyu incelediğimizde her alanda tek değer bulunmadığını gözlemliyoruz. Bu yüzden İsim & Soyisim ve Telefon kısımlarını ayırıyoruz. Yeni tablomuz aşağıdaki gibi olmalı.



2.Normal Form (2NF) :

- İlk Normal Form (1NF) 'a uymalıdır.
- Anahtar olmayan tüm özellikler birincil anahtara bağlı olmalıdır.

Bu kuralları aşağıdaki tabloya uygulamaya çalışalım.

Tabloda Öğretmenin Yaş kısmı bir aday anahtarın alt değerine bağlı (ID) ve bu 2NF kuralını ihlal etmekte. Bunu düzelttiğimizde tablomuz aşağıdaki gibi 2 parçaya bölünmüş olacak.



3.Normal Form (3NF) :

- 2.Normal Form (2NF) ‘ye uygun olmalıdır.
- Anahtar olmayan hiçbir kolon bir diğerine bağlı olmamalı yani her kolon unique anahtara tam bağımlı olmalıdır.

Aşağıdaki birbiri ile ilişkili 2NF ‘ye uygun tablomuzu 3.Normal Form’a geçirmeye çalışalım.

Veritabanımızı 3NF şartlarına göre şekillendirebilmek için anahtar olmayan ve eşsiz anahtara tam bağımlı olmayan tüm kolonlar kalkmalı. Burada Ülke ve Şehir Posta Kodu’na ve Posta Kodu ID’ye bağımlıdır. Birincil olmayan nitelikler ( Ülke , Şehir ) süper anahtara (ID) geçişli bağımlıdır ve bu 3NF kuralını ihlal eder.
Ek olarak 3. Normal Form'u daha iyi anlayabilmek için Veritabanlarında Fonksiyonel Bağımlılık konusuna göz gezdirmeniz tavsiye edilir.

Bu nedenle Şehir ve Ülke kısımlarını Posta Kodu Primary Key olacak şekilde farklı tabloya taşımalıyız. Son hali aşağıdaki gibi olmalıdır.


Boyce-Codd Normal Form (BCNF) :

- 3.Normal Form (3NF)’ye uygun olmalıdır.
- Her belirleyici kısım aynı zamanda aday anahtar (Candidate Key) olmalıdır.

Kuralı biraz açarsak , bir tablonun BCNF olup olmadığını anlamak için tablonun tüm belirleyicileri tespit edilip, her birinin aday anahtar özelliği taşıyıp taşımadığını kontrol etmeliyiz. Veri tabanı tasarımında X → Y şeklinde bir fonksiyonel bağımlılık bulunuyorsa, bu bağımlılıktaki Y birincil anahtar olmalıdır. 3.Normal Form (3NF) tasarımında X anahtarı bir aday anahtar (Candidate Key) olmak zorunda değildir. Ancak BCNF’de bunun tersine X → Y şeklindeki bir fonksiyonel bağımlılık durumunda X bir aday anahtar olmalıdır.

Aşağıdaki Üniversite tablosunu incelersek daha iyi anlaşılacaktır. Tabloda öğrencilerin birden fazla konu üzerinde çalıştığı görülmekte. Örneğin , Öğrenci ID’si 101 olan öğrenci Java ve C++ konularını seçmiş. Ek olarak bir konuyu birden fazla profesörün de anlattığı görülmekte.

Tabloda , Öğrenci ID Primary Key ve Konu bir Birincil niteliktir.Ancak burada birden fazla bağımlılık vardır yani Profesör → Konu . Bu tabloyu BCNF’e uyarlamak için Öğrenci tablosu ve Profesör tablosu olarak 2 ayrı tabloya bölmeliyiz. Tablonun son hali şu şekilde ;


Tablolarımız bu halde BCNF uygun hale geldi.

4. Normal Form (4NF) :

- 3.Normal Form (3NF)’ye uygun olmalıdır.
- Çok değerli bir bağımlılığa sahip olmamalıdır. (Multi-Valued)

Yani şöyle ki , klasik bir oyun düşünelim ve bu oyunun bir mobil bir de masaüstü versiyonu olsun. Bu oyunun verilerini tutan bir veritabanını düşündüğümüzde aynı kullanıcıya ait bir masaüstü bir de mobil satırları oluşacak. Bu işlem de bizi 4NF'e itecektir.

Gelecek yazılarda Normalizasyon üzerine çeşitli örnekler çözeceğiz. Yazıda eksik ya da yetersiz gördüğünüz kısımları yorum olarak belirtebilirsiniz. İyi çalışmalar.

Heyy ! Blog'a abone olup yazılarımdan ilk sen haberdar olmak ister misin ?

ABONE OL!

Yorumlar

Neslihan | 25.03.2020

Çok öğretici

Cem E. | 06.04.2020

Anlatımınız için teşekkür ediyorum, güzel olmuş, elinize sağlık.

Yorum Ekle

Yorumunuz onaylandıktan sonra yayınlanacaktır.