Makale Özeti

Veritabanı normalizasyonu, ilişkisel veritabanı sistemlerinde tablolara karar verme kurallarıdır. Sağlıklı bir veritabanı uygulaması için bu kurallara uyma zorunluluğu uygulamanın kapsam ve önemiyle doğru orantılıdır.

Makale

Veritabanı normalizasyonu, ilişkisel veritabanı sistemlerinde tablolara karar verme kurallarıdır. Sağlıklı bir veritabanı uygulaması için bu kurallara uyma zorunluluğu uygulamanın kapsam ve önemiyle doğru orantılıdır.

İlişkisel bir veritabanı sistemi Veritabanı Tasarımı makalemizde ifade edildiği gibi veri bütünlüğünün sağlanması, bilgi tekrarının önlenmesi, verilerin doğru ve etkin bir biçimde kullanılması sağlamaktadır. Veritabanı sistemlerinde veriler tablolarda tutulmaktadır. Normalizasyon kuralları da bu tablolarda tutulacak verilerin nelerden oluşacağına karar verme kuralları olduğuna göre ilişkisel veritabanı tasarımı aşamasında gerekli bir işlemdir. Genel kabul görmüş 5 normalizasyon kuralı vardır.

1. Normalizasyon Kuralı:

Bir satırdaki bir alan yalnızca bir tek bilgi içerebilir. Örneğin dersler tablosunda, ders tipi için zorunlu, seçmeli diye alanlar açsaydık, bu kurala uymamış olurduk. Böyle bir durumda, ayrıca ders tipleri tablosu oluşturularak bu kural çiğnenmemiş olur.

İpucu: Verileri virgül veya bir başka karakter ile ayırıp aynı alanda tutmak ve daha sonra program içerisinde split ile bu değerleri ayırmak ilişkisel veritabanının doğasına aykırıdır.

2. Normalizasyon Kuralı:

Bir tablo için, anahtar alan dışındaki her alan, birincil anahtar olarak tanımlı tüm alan veya alanlara bağlı olmak zorundadır.

Örneğin, Staj tablosunda OGRENC_ADI diye bir alan eklese idik, bu sadece STAJ ile ilgili bir bilgi olacaktı ve OGRENCI_NO'ya bağlı bir özellik olmayacaktı. Bunu çözmek için, öğrenci bilgilerini ayrı bir tabloda tutmak gerekir.

Eğer anahtar alan birden fazla alandan oluşuyorsa, anahtar alanlardan sadece birine bağlı veriler, tabloda yer almamalı, bu veriler ayrı bir tabloda tutulmalıdır.

Bunun tersi de geçerlidir. Yani iki ya da daha fazla tablonun birincil anahtarı aynı olmamalı. Eğer böyle ise, bu iki tablo tek tabloya indirilmelidir.

3. Normalizasyon Kuralı:

Bir tablo için, anahtarı olmayan bir alan, anahtarı olmayan başka hiç bir alana bağlı olamaz.

Örneğin, dersler için ders tipi adında bir alan ekleyip burada da zorunlu ders için Z, seçmeli dersler için S, zorunlu seçmeli dersler için ZS yazılsaydı, bu kodlama, dersler tablosunun birincil anahtarı olan DERS_KODU alanına bağlı bir kodlama olmayacaktı. Çünkü bu kodlama bir başka anahtarı olmayan alana bağlıdır. Bunun sonucunda da veritabanında, karşılığı olmayan bir kodlama yer almış olacaktı. Ders tipi bilgisini kodlu olarak tutan alan aslında ders tipi açıklaması olan başka bir alana bağlıdır. Bu ilişki başka bir tabloda tutulmalıdır.

Bu durumda, ders tipleri adında bir tablo gereklidir. Bu tablonun alanları da DERS_TIPI_KODU ve DERS_TIPI_ADI olmalıdır. Ancak bundan sonra, dersler tablosunda DERS_TIPI_KODU adında bir sütun açıldıktan sonra buraya da ders tipleri tablosunda tanımlanan ders tipi kodları yazılabilir.

4. Normalizasyon Kuralı:

Birincil anahtar olan alanlar ile anahtarı olmayan alanlar arasında, birden fazla bağımsız bire çok (1-N) ilişkisine izin verilmez.

4.Normal formu sağlamak için, her bağımsız bire çok (1-N) ilişki için ayrı bir tablo oluşturmak gerekir.

5. Normalizasyon Kuralı:

Veri tekrarlarını önlemek için her bir tabloyu mümkün olduğunca küçük parçalara bölmek gerekir. Aslında ilk 4 kural sonuçta bu işe yarar ancak, bu kurallar kapsamında olmayan tekrarlamalar da 5. normalizasyon kuralı ile giderilir.

Örneğin, öğrencinin uyruğu ile ilgili verinin girileceği bir sütun olsun: Bu bölüme girilecek bilgiler bellidir: T.C., Almanya, Fransa,.. gibi.

Bu bilgiler başka bir tabloda tutabilir. Böylelikle, kullanıcıların bu alan gelişi güzel bilgiler girmesi engellemiş olur. Bu da sorgulama esnasında veriler arasında bir tutarlılık sağlar. Bu işlem sonucunda, tutarsızlıklara neden olabilecek ve sık tekrarlayan veriler başka bir tabloya taşınmış olacaktır.

Veritabanı normalizasyon kuralları, bir ilişkisel veritabanının tasarlanma aşamalarını değil de ilişkisel veritabanında yer alacak kayıtların ilişkisel veritabanı ile uyumlu olup olmadığını denetlemeye yönelik olduğundan hareketle sonuç olarak ilişkisel bir veritabanı tasarımı;

- Yer kullanımı çok iyi olmalı dolayısıyla boş yer mümkün olduğunca az olmalıdır.

- Veri bütünlüğü sağlanmalı ve veri tekrarı yapılmamalıdır.

- Veriler, kendi aralarında bir ilişki tanımlanmaya uygun olmalıdır.