Veri Tabanı Normalizasyon Nedir?
Veri Tabanı Normalizasyon, veritabanının tasarım aşamasında veri tekrarını, veri kaybını veya veri yetersizliğini önlemek için gerçekleştirilen işlemler bütünüdür.
Her kurala “normal form” adı verilir. İlk kural kullanılıyorsa veritabanının “ilk normal formda” olduğu söylenir.
İlk üç kural kullanılıyorsa veritabanının “üçüncü normal form” olduğu söylenir.
Genel olarak, normalleştirme için ek tablolara ihtiyaç duyulur. Bunun ek yük getirdiği düşünülebilir fakat aslında tam tersi yükü azaltır. Az sonra ne demek istediğimi daha iyi anlayacaksınız.
Basit bir şekilde bahsetmek gerekirse; Normalizasyon işlemi, çok fazla satır ve sütundan oluşan bir tabloyu veri tekrarından korumak için daha az satrı ve sütunda oluşan tablo veya tablolara bölme işlemidir.
Kurallar, depolanacak verilerin neler olacağını belirler ve kayıtlar arasında veri tekrarı, veri kaybı ve yetersizliğini engeller.
Normalizasyon tanım olarak ayrıştırma anlamına gelmektedir.
Normalizasyon Amaçları
Temel amacı; Tabloların oluşturulması, tablolar arasında artıklığı ve tutarsız bağımlılığı ortadan kaldırmaktır.
- Veri Bütünlüğü Sağlamak: Gereksiz veri tekrarını önlemek
- Uygulamadan Bağımsızlık: Hazırlanan Veri Modeli Uygulamaya göre değil kullanılacak veriye göre tasarlanmalı. Yani uygulama değişse veya silinse bile Veritabanı tutarlı bir şekilde çalışmaya devam etmeli.
- Performansı Artırmak: Veri tekrarını en aza indirmek, eğer mümkünse yok etmek. Böylelikle veri tabanındaki gerekli işlemler çok daha hızlı yapılacaktır.
Normalizasyon Kuralları
Normalizasyon yapılırken uyulması gereken kurulların her birine normal form adı verilir. Normalde kullanılan 3 kural vardır bunlar;
– Birinci Normal Form (1NF)
–İkinci Normal Form (2NF)
–Üçüncü Normal Form (3NF)
Daha yüksek düzey formlarda mevcut fakat genelde kullanılmıyor çünkü 3NF yeterli geliyor. 3NF’e uygun olan tablolar aynı zamanda 1NF ve 2NF‘ede uygundur. 2NF tabloları ise 1NF‘e uygundur.
Normalizasyon Kurallarından bahsederken aynı zamanda her kural içinde 2 tablo örneği vereceğim. İlk vereceğim tablo kurala uygun olmayan tabloyken ikinci tablo bahsi geçen kurala uygun tablo olacak. Böylelikle Normalizasyon kurallarını daha iyi anlayacağınızı tahmin ediyorum.
1.Normal Form(1NF)
- Bir alan içerisindeki bilgi özel karakterlere ayrılarak tutulmamalıdır.
- Birden fazla bilgi tek bir sütunda olamaz.
- Tekrarlanan sütun yapıları olmalıdır.
Aşağıdaki tablo gördüğünüz üzere 1NF kuralına uygun değildir çünkü “Birden fazla bilgi tek bir sütunda olamaz”
| Telefon Tablosu | |
| Ad Soyad | Telefon |
| Aydın Bekoğlu | 555,431,679 |
| Cemal Yıldırım | 904 |
| Serkan Özkan | 648,076 |
Aşağıdaki tablo ise 1NF uygun şekilde oluşturulmuştur. Ad ve Soyad farklı sütunlara ayrılmış, Telefon sütunundaki telefon numaraları ise her hücreye bir veri gelecek şekilde düzenlenmiştir.
| Telefon Tablosu | ||
| Ad | Soyad | Telefon |
| Aydın | Bekoğlu | 555 |
| Aydın | Bekoğlu | 431 |
| Aydın | Bekoğlu | 679 |
| Cemal | Yıldırım | 904 |
| Serkan | Özkan | 648 |
| Serkan | Özkan | 076 |
1.Normal Form Sorunları(1NF)
- Veri Ekleme Sorunu: Eklenen verinin daha önce olup olmadığının kontrolü çok zordur. (Aynı kişiye ait birden fazla satır ve sütun mevcut)
- Veri Güncelleme Sorunu: Kişiye ait bir veri güncellenmek istendiğinde hangisinin güncelleneceği sorunu (Birden fazla Telefon Numarası Mevcut)
- Veri Silme: Hangi verinin silineceği konusunda belirsizlik (Aynı kişiye ait birden fazla satır ve sütun mevcut )
2.Normal Form(2NF)
Bu Normalizasyon Kuralı, 1NF’deki güncelleme sorununu ortadan kaldırmak için ortaya atılmıştır. Bu sorun yeni tablo(lar) oluşturularak ortadan kaldırılmıştır.
- Tabloda birincil anahtar (Primary Key) olmalı ve anahtar olmayan sütunlar birincil anahtara bağlı olmalıdır. Birincil anahtar “PK” olarak gösterilir.
- Birincil anahtar birden fazla sütundan oluşuyorsa tablodaki veriler her iki sütuna da bağımlı olmalıdır
Aşağıda 1NF kuralına uygun bir tablo görüyorsunuz fakat 2NF’e uygun olması için Öğrenci ve Not bilgileri 2 farklı tabloya ayrılmalı!
| Ogrenci ve Not Tablosu | ||||
| ogrNo(PK) | Ad | Bolum | DersKodu(PK) | Not |
| 123 | Aydın | Bilişim | b678 | 32 |
| 123 | Aydın | Bilişim | b902 | 98 |
| 658 | Cemal | Bilgisayar | b594 | 69 |
| 375 | Serkan | Bilişim | b902 | 73 |
Aşağıdaki tablolar 2NF kuralına uygun olarak yeniden tasarlanmıştır.
1.Tablo
| Ogrenci Tablosu | ||
| ogrNo(PK) | Ad | Bolum |
| 123 | Aydın | Bilişim |
| 658 | Cemal | Bilgisayar |
| 375 | Serkan | Bilişim |
2.Tablo
| Not Tablosu | ||
| ogrNo(PK) | DersKodu(PK) | Not |
| 123 | b678 | 32 |
| 123 | b902 | 98 |
| 658 | b594 | 69 |
| 375 | b902 | 73 |
2.Normal Form Sorunları(2NF)
- 1NF’teki Veri Ekleme ve Silme Sorunu devam etmektedir.
3.Normal Form(3NF)
- Anahtar olmayan sütunlar ya başka bir tablonun birincil anahtarını (PK) referans gösterecek (FK “ikincil anahtar”) ya da aynı tabloda ki diğer alanlar ile doğrudan ilişkili olacak.
| musNo(PK) | urunID(FK) | sehirAD | sehirKod | miktar |
| m111 | u1 | İstanbul | 34 | 100 |
| m111 | u2 | İstanbul | 34 | 200 |
| m222 | u2 | Kastamonu | 37 | 120 |
| m333 | u3 | Aydın | 9 | 340 |
| m444 | u1 | Kastamonu | 37 | 66 |
Yukarıdaki tablo sadece 1NF uygun. 2NF ve 3NF uygun değil. Şimdi gelin 2NF uygun hale getirelim.
1.Tablo
| musNo(FK) | urunID(PK) | miktar |
| m111 | u1 | 100 |
| m111 | u2 | 200 |
| m222 | u2 | 120 |
| m333 | u3 | 340 |
| m444 | u1 | 66 |
2.Tablo
| musNo(PK) | sehirAD | sehirKod |
| m111 | İstanbul | 34 |
| m222 | Kastamonu | 37 |
| m333 | Aydın | 9 |
| m444 | Kastamonu | 37 |
Müşteri birincil anahtarını kullanarak ikinci tabloyu elde ettik. İkinci tabloya dikkatlice bakarsanız anahtar olmayan “sehirAD” ve “sehirKod” sütunları “musNo” ile doğrudan ilişkili değil fakat birbirleriyle doğrudan ilişkilidir. Gelin 2.Tabloyu tekrar bölelim ve böylelikle 3NF uygun hale gelsin.
1.Tablo’da hiç bir değişiklik yapmıyoruz.
| musNo(PK) | sehirKod(FK) |
| m111 | 34 |
| m222 | 37 |
| m333 | 9 |
| m444 | 37 |
2.Tablodan “sehirAD” sütunu çıkardık ve yeni bir tablo oluşturduk. Yukarıda “sehirAD” ve “sehirID” birbirleriyle bağımlı demiştik. Yeni oluşturacağımız tabloyu buna göre oluşturduk.
| sehirKod(PK) | sehirAD |
| 34 | İstanbul |
| 37 | Kastamonu |
| 9 | Aydın |
Ayrıca “VTYS Sistemlerinin Sağladığı Yararlar” adlı makalemizin de sizlere faydalı olacağını düşünüyorum.
