İlişkisel veritabanı teorisinde geçen ve ilişkisel bir veri tabanının hafızayı daha verimli kullanması için geliştirilen normal şekillerden üçüncüsüdür. Bir veri tabanı tasarlanırken veya daha sonradan normalleştirilebilir yani normal form kurallarına uyması sağlanabilir. Bu sayede veritabanı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. Veritabanımızın üçüncü normal şekle uyması için iki temel kural vardır;
- İkinci normal şekle uymalıdır.
- Bir tablodaki aday anahtar olmayan hiç bir kolon diğer herhangi bir kolunu tanımlayamamalıdır.
Not! Yukarıdaki ikinci şart ile kastedilen şey bir tablodaki anahtarın diğer tüm kolonları tek başına tanımlayabilmesi ama anahtar olmayan bir kolonun diğer herhangi bir kolonu tanımlayamamasıdır.
Örnek:
Çalışanlar Tablosu
id İsim Soyisim Yaş Departman Dahili Tel
1 Berkay Demirel 24 Bilgi İşlem 144
2 Ali Veli 33 Bilgi İşlem 144
3 Mehmet Ahmet 25 Muhasebe 145
Bu tasarımda id bilgisi anahtardır. Id bilgisi isim, soyisim, yaş, departman ve dahili tel bilgilerini tanımlar yani id bilgisini bildiğimiz bir kişinin bu bilgilerine ulaşabiliriz. Diğer bilgilerden örnek olarak isim bilgisi diğer bilgileri tanımlayamaz yani Berkay isminde iki çalışan olduğunu düşünürsek bu çalışanların soyisim, yaş, departman ve dahili tel bilgileri farklı olabilir. Berkay ismini bildiğimizde hangi Berkay çalışanını aradığımızı bilemeyiz. Ancak bu tabloda dahili tel bilgisi departman bilgisini tanımlar ve aynı şekilde departman bilgiside dahili tel bilgisini tanımlar. Yani dahili tel bilgisini bildiğimizde departman bilgisinide öğrenebiliriz. Elimizde 144 dahili tel bilgisi olduğunu düşünürsek bu bilgiden departmanın bilgi işlem olduğunu öğrenebiliriz. Bu yüzden bu iki bilgi arasında fonksiyonel bağımlılık vardır denir ve üçüncü normal forma uymaz.
Çalışanlar Tablosu
İsim Soyisim Yaş Departman
Berkay Demirel 24 144
Ali Veli 33 144
Mehmet Ahmet 25 145
Departman Tablosu
Departman Dahili Tel
Bilgi İşlem 144
Muhasebe 145
Yukarıda görüldüğü üzere bu tasarım hem birinci hem ikinci hem de üçüncü normal forma uyar.
İlişkisel veritabanı teorisinde geçen ve ilişkisel bir veri tabanının hafızayı daha verimli kullanması için geliştirilen normal şekillerden ikincisidir. Bir veri tabanı tasarlanırken veya daha sonradan normalleştirilebilir yani normal form kurallarına uyması sağlanabilir. Bu sayede veritabanı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. Veritabanımızın ikinci normal şekle uyması için iki temel kural vardır;
- Birinci normal şekle uymalıdır.
- Bir satırı tek başına tanımlayabilecek bir candidate key olmalıdır.
Örnek:
Çalışanlar Tablosu
İsim Soyisim Yaş Departman Dahili Tel
Berkay Demirel 24 Bilgi İşlem 144
Ali Veli 33 Bilgi İşlem 144
Mehmet Ahmet 25 Muhasebe 145
Bu tabloya baktığımızda birinci normal şekle uymadığını görürüz çünkü kişi departman ve dahili tel bilgisi farklı kişiler için tekrar ediyor. İlk önce birinci normal şekle uygun hale getirmek için departman bilgilerini ayrı bir tabloda tutabiliriz.
Çalışanlar Tablosu
İsim Soyisim Yaş Departman
Berkay Demirel 24 144
Ali Veli 33 144
Mehmet Ahmet 25 145
Departman Tablosu
Departman Dahili Tel
Bilgi İşlem 144
Muhasebe 145
Yukarda görüldüğü üzere tasarım birinci normal şekle uygun hale getirildi. Departman talosuna bir id (anahtar) bilgisini eklememizin nedeni dahili tel numarasının zaten her bir satır için farklı olacağıdır. Burada dikkat edilmesi gereken şey her bilgi bir satırı tek başına ifade edebiliyor olsa bile o bilginin anahtar olarak kullanılamayacağıdır. Örneğin kişinin e-posta adreside herkes için farklıdır ancak bu bilgi anahtar olarak kullanılmamalıdır. Çünkü bu bilgi bir sayıya göre hafıza daha fazla yer kaplar ve ilişki kuralacak her iki tabloda da bulunması gerektiğinden gereksiz olacaktır. Bu yüzden genelde anahtarlar sayısal değer olarak tutulurlar. Ayrıca anahtarlar üzerinde indeks oluşturulduğundan sayısal değerler kullanılması çok daha uygun olacaktır. Burada dahili tel vereceğimiz id bilgisi gibi hem sayısal bir değer olduğundan hem de id bilgisi gibi çok büyük bir sayısal değerden oluşmadığından dolayı (örnek olarak 30 haneli bir sayısal değerin de anahtar olarak kullanılması çok uygun değildir) id bilgisi olarak kullanılabilir.
Bu tasarımın ikinci normal şekle uyması için ikinci şart olan bir candidate key belirlenmesi gerekir. Yukarıdaki tasarımda çalışanlar tablosundaki her satırı tanımlayan bir anahtar yoktur.
Çalışanlar Tablosu
id İsim Soyisim Yaş Departman
1 Berkay Demirel 24 144
2 Ali Veli 33 144
3 Mehmet Ahmet 25 145
Departman Tablosu
Departman Dahili Tel
Bilgi İşlem 144
Muhasebe 145
Yukarıdaki tasarımı incelediğimizde ikinci normal şekle uygun halde olduğunu görebiliriz. Çalışanlar tablosu için id, departman tablosu içi dahili tel bilgisini anahtar olarak belirledik ve bu bilgiler bulundukları satırı tek başına tanımlayabiliyorlar. Ayrıca bu tasarım birinci normal şekle de uyduğu için ikinci normal şekle uyduğunu söyleyebiliriz.
İlişkisel veritabanı teorisinde geçen ve ilişkisel bir veri tabanının hafızayı daha verimli kullanması için geliştirilen normal şekillerden en ilkelidir. Bir veri tabanı tasarlanırken veya daha sonradan normalleştirilebilir yani normal form kurallarına uyması sağlanabilir. Bu sayede veritabanı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. Veritabanımızın ilk normal şekle uyması için iki temel kural vardır;
- Veritabanında bulunan ilişkili tabloların aralarında ilişki (bağlantı, join) kurulabilir şekilde tasarlanması.
- Tablolarda veri tekrarı bulunmaması.
Örnek:
Bir telefon defteri uygulaması tasarladığımızı düşünelim. Tablomuzda isim, soyisim ve telefon bilgilerini tutuyor olalım. Tablomuzdaki bir satır şu şekilde olabilir;
İsim Soyisim Telefon
Berkay Demirel 5454444444
Buraya kadar her şey normal gözüksede eğer bir kişinin ikinci telefonu varsa ve biz bu bilgiyi veritabanına eklemek istersek o zaman bir satır daha eklememiz gerekir. Bu durumda veritabanımız şu şekilde olur;
İsim Soyisim Telefon
Berkay Demirel 5454444444
Berkay Demirel 5453333333
Burada görüldüğü üzere bir kişinin iki telefonu var ve bu bilgi veritabanında saklanabiliyor ancak verilerimiz tekrar ediyor. Bu durumu tablomuza telefon2 adlı bir kolon ekleyerek çözebilirdik ancak ya sayısını bilmediğimiz kadar veri girişi olacaksa ne olacağıdır. Yani kişilerin 3. ve 4. telefon bilgileride varsa ne olacak her seferinde yeni bir kolon mu ekleyeceğiz. Diyelim ki kolon ekledik ve problemi çözdük. Bu durumda da tek bir telefonu olan kişilerin 2. 3. ve 4. telefon bilgisi kolonları boş kalacak ve hafıza gereksiz yer kaplayacaklar. Bu durumun en iyi çözümü telefon bilgisini ayrı bir tabloda tutmak ve bu iki tablo arasında ilişki kurmaktır.
Kişi Tablosu
id İsim Soyisim
1 Berkay Demirel
2 Ali Veli
Telefon Tablosu
id Telefon
1 5454444444
1 5453333333
2 5452222222
Yukarıda görüldüğü üzere Berkay Demirel'in telefon numaralarına erişmek sitediğimizde kişinin id bilgisini kullanarak telefon tablosundan telefon bilgilerini getirebiliriz. Bu şekilde bir tasarım yaparak veritabanımızı birinci normal forma uygun hale getirdik.
Not! Bu şekilde verilerimizi iki tabloya bölmek bize hafıza olarak kazanç sağlar. Eğer daha hızlı erişim istiyorsak denormalization yapılarak veriler tek tabloda tutulabilir.
Verilerin büyümesi ve karmaşıklaşması ile birlikte 1980'lerin sonunda geleneksel ER Modelini veritabanı modellemesi için kullanmak gittikçe zorlaşmıştır. Bu nedenle, mevcut ER Modelin ile karmaşık uygulamaları daha iyi ele almayı sağlamak için bazı iyileştirmeler veya geliştirmeler yapılmıştır. Bu geliştirmeler ile birlikte mevcut ER Modeline üç yeni kavram eklenmiştir. Bunlar;
- Generalization
- Specialization
- Aggregration
Generalization
Generalization, iki düşük seviyeli varlığın daha yüksek seviyeli bir varlık oluşturmak için birleştiği aşağıdan yukarıya bir yaklaşımdır. Generalization'da, yüksek seviyeli varlık daha yüksek seviyeli varlık oluşturmak için diğer düşük seviyeli varlıklar ile birleştirilebilir.
Daha çok Süper Sınıf ve Alt Sınıf sistemine benzeen bu yaklaşımın tek farkı aşağıdan yukarıya doğru olmasıdır. Dolayısıyla varlıklar daha genel bir varlık oluşturmak üzere birleştirilir, başka bir deyişle, alt sınıflar bir süper sınıf oluşturmak için birleştirilir.
Örneğin, birikim ve cari hesap türleri varlıkları genelleştirilebilir ve her ikisini de kapsayan, hesap adında bir varlık yaratılabilir. Bu alt tablonun ortak özellikleri ana tabloya eklenir ve alt tablolara o tablolara özel bilgiler eklenir. Örnek verecek olursak hesap numarası ortaktır ve hesap tablosuna koyulabilir ancak birikim tablosunun kendine ait özelliği olan vade bilgisi birikim hesap türüne ait tabloya eklenir.
Specialization
Specialization, Generalization'ın tam tersidir denilebilir. Bir üst seviye varlığın iki alt seviye varlığa bölünebileceği yukarıdan aşağıya doğru olan bir yaklaşımdır.
Örneğin eski ve yeni tüm öğrencileri bir tabloda tutmak yerine öğrenci bilgilerini mevcut öğrenciler ve eski öğrenciler adında iki tabloya bölebiliriz.
Aggregration
Aggregration, iki varlık arasındaki ilişkinin tek bir varlık olarak değerlendirildiği bir süreçtir.
Yukarıdaki şemada, kurs merkezi ve kurs arasındaki ilişki başka bir varlık olan ziyaretçi ile ilişki içinde olan bir varlık olarak hareket etmektedir. Yani kurs almak isteyen kişiler kurs bilgisine veya kurs merkezi bilgisine doğrudan erişemeyecek bu iki bilginin birleşimine erişebilecektir. Örneğin kurs almak isteyen kişi modeli kadıköy şubesi bilgisine erişemeyecek veya veritabanı kursu bilgisine erişemeyecektir. Ancak bu kişi modeli kadıköy şubesindeki veritabanı kursu bilgisine erişebilecektir.
Normalizasyon, veritabanımızın verileri daha verimli tutmasını sağlayan kurallar setidir. Normalizasyon ile veritabanındaki tekrarlı veriler ortadan kalkar, veri tutarlılığı artar ve çoğu zaman veritabanı işlemleri hızlanır. Ayrıca veritabanı üzerinde yapılan silme ve güncelleme gibi işlemlerde oluşabilecek zorluklar veya problemler ortadan kalkar.
Normalizasyon, veritabanlarına seviyelerle uygulanır. Bir veritabanının normal formlardan herhangi birine uygun olduğunu söyleyebilmek için, söz konusu normal formun tüm kriterlerini eksiksiz yerine getiriyor olması şarttır.
Basitçe tanımlamak gerekirse, normal formlar normalizasyon seviyeleridir. Bu seviyeler gereksiz veri tekrarlarını ne derecede engellediği ve tutarlılığı ne kadar sağladığına bağlı olarak derecelendirilir. Seviye yükseldikçe veri tutarlılığı artar, veri tekrarı düşer.
Normalizasyon seviyeleri 1NF (Birinci Normal Form), 2NF, 3NF, BCNF(Boyce-Codd Normal Form, 3.5NF'de denir), 4NF şeklinde adlandırılır ve yukarı doğru devam eder. Ancak daha yukarı normalizasyon seviyeleri çok nadiren kullanılır çünkü çoğu zaman uygulanması mümkün olmayabilir.
- Birinci Normal Şekil (First Normal Form - 1NF)
- İkinci Normal Şekil (Second Normal Form - 2NF)
- Üçüncü Normal Şekil (Third Normal Form - 3NF)
- Boyce Codd Normal Form (BCNF)
- Dördüncü Normal Şekil (Fourth Normal Form - 4NF)


