Veritabanı Normalizasyonu
19 Ocak 2017 Perşembe
Veritabanı normalizasyonu; veri tekrarından kaçınıp, veritabanının kendi içinde tutarlı olması işlemine denir. Veriler veritabanında normalize edilme idi şu sıkıntılara yol açardı:
* Bazı bilgiler birden fazla kez tekrarlayabilirdi,
* Bir bilgiyi güncellemek için birden fazla yerde bulma ve değiştirme yapmak gerekirdi,
* Bir veri eklemek için birden fazla tabloya veri eklemek gerekirdi,
* Bir veriyi silmek için birden fazla tabloda veriyi bulup silmek gerekirdi.
Tüm bu sorunlarla karşılaşmamak için veritabanını normalizasyon kuralları dahilinde tasarlayıp, böylece verinin de kolay ve tek noktadan yönetebilir hale geliyoruz.
Toplamda 6 adet normalizasyon kuralı vardır ancak ilk üç kural birçok problemin çözümü için yeterlidir. Bunlar:
* 1. Normal Form (1NF)
* 2. Normal Form (2NF)
* 3. Normal Form (3NF)
Geriye kalan NF'ler çeşitli akademisyenler tarafından ortaya atılmış kurallardır. Bu NF'ler için çok fazla detaya inip kafa bulandırmak istemiyorum. Şimdi dilerseniz tüm NF'leri kapsayacak ideal bir veritabanı tasarımı için maddeler oluşturalım:
- Bir tabloya ait tüm özellikler (attribute) atomik yapıda olmalıdır. Örneğin AdSoyad sütununa sahip bir tablonuz var ise, bu sütunu Ad ve Soyad şeklinde 2 ayrı sütun gibi tanımlamanız sorgularda size kolaylık ve hız sağlayacaktır. Ya da sütunlardaki değerleriniz aralarda virgülle ayrılmış şekilde bulunamazlar. Böylesi bir durumda DML işlemlerini kullanmanız mümkünsüz hale gelir.
- Tablonuzdaki tüm sütunlar o tablodaki PK alanına sadık(ilgili) olmalıdır. Bunun dışındaki tüm sütunları o tablodan çıkarmalısınız.
- Hesaplanmış alanları kesinlikle tablodan çıkarmalısınız. Örneğin maaş bilgisi tutulan bir tabloda bu maaş alanı üzerinden yıllık maaş hesaplanması gereksizdir. Daha açık bir ifade ile; yıllık maaş bilgisi tabloda bulunan bir sütuna bağlı bilgidir halbuki bir tabloda bulunan tüm kolonlar master key dediğimiz PK'ye bağlı olmalıdır. Siz zaten yıllık maaş bilgisini sorgu ile çekebilirsiniz.
- Birbirini tekrar eden sütun grupları oluşturulmamalı. Buna yatayda sütun açma da diyebiliriz aslında. Örneğin işe yeni başlayan bir çalışan için her defasında Employee1, Employee2 şeklinde sütun açmak, hem tablo yönetimi zora sokacaktır hem de diskinizde gereksiz yer işgaline sebep olacaktır.
- Birbiriyle bağlantılı tablolar arasında sağlıklı ilişki kurulabilmesi için PK ve FK değerlerinin tanımlanmış olması gerekir.
Sonuç olarak; veritabanı tasarımına yoğun zaman harcanmalı zira sonradan yapacağınız her değişiklik size sonraki süreçte daha fazla zaman harcanmasına sebebiyet verecektir.
Bir sonraki makalemde görüşmek üzere.