Normalizasyon, ilişkisel veri tabanı tasarlanırken veri tekrarını, veri kaybını ve tutarsızlığı önlemek için tabloları mantıklı parçalara bölme işlemidir. Bir dolabı düzenlemeye benzer: çoraplar bir çekmecede, tişörtler başka rafta durursa aradığınızı bulmak kolaylaşır.
Normalizasyon yapılmazsa
- Ekleme sorunu: Yeni bir veri eklemek için ilgisiz başka verileri de girmek gerekir.
- Güncelleme sorunu: Aynı veri birçok yerde durduğu için hepsinin tek tek düzeltilmesi gerekir; biri unutulursa veri tutarsızlaşır.
- Silme sorunu: Bir satır silinince istenmeyen başka bir bilgi de kaybolur.
Normalizasyonun amaçları veri tekrarını azaltıp bütünlüğü sağlamak, uygulamadan bağımsız bir model kurmak ve daha az kopya sayesinde performansı artırmaktır. Normalizasyon tablo sayısını azaltmaz, artırır.
Anahtarlar ve fonksiyonel bağımlılık
İki veya daha fazla sütundan oluşan birincil anahtara bileşik anahtar denir. A sütunu bilindiğinde B kesin olarak bulunabiliyorsa B, A'ya fonksiyonel bağımlıdır (A → B). Başka bir niteliğin bağımlı olduğu niteliğe belirleyici denir.
- Tam bağımlılık: Sütun, bileşik anahtarın tamamına bağlıdır. (Öğrenci No, Kurs Kodu) → Not.
- Kısmi bağımlılık: Sütun, bileşik anahtarın yalnızca bir parçasına bağlıdır. Öğrenci No → Öğrenci Adı. Anahtar tek sütunsa kısmi bağımlılık olamaz.
- Geçişli bağımlılık: Sütun, anahtara başka bir sütun üzerinden dolaylı bağlıdır. Öğrenci No → Posta Kodu → Şehir.
Normal formlar
- 1NF: Her hücre tek ve bölünemez (atomik) bir değer taşır. "555-111, 555-222" gibi liste değerler satırlara bölünür.
- 2NF: Tablo 1NF'dedir ve anahtar olmayan her sütun birincil anahtarın tamamına bağlıdır. Kural: "Bu bilgi kimin?" diye sor, o tabloya koy.
- 3NF: Tablo 2NF'dedir ve hiçbir sütun anahtara başka bir sütun üzerinden bağlı değildir. Bölüm telefonu öğrencinin değil bölümün bilgisidir; ayrı tabloya alınır.
- BCNF: Her belirleyici bir aday anahtardır. Bir danışmanın tek bir bölümde çalıştığı ÖĞRENCİ (ÖğrNo, Bölüm, Danışman) tablosu 3NF'de olsa bile Danışman → Bölüm bağımlılığı yüzünden sorun çıkarır; tablo ikiye ayrılır.
- 4NF: Birbirinden bağımsız çok değerli bağımlılıklar ayrı tablolara alınır. Bir öğrencinin bölümleri ve sporları birbirinden bağımsızsa ÖĞRENCİ_BÖLÜM ve ÖĞRENCİ_SPOR olarak ayrılır.
Üst normal formlar alttakileri kapsar; 3NF'deki bir tablo 1NF ve 2NF'yi de sağlar. Normalizasyon çoğu uygulamada 3NF'ye kadar yapılır.
Örnek: kurs kayıt tablosu
Bir hücrede birden fazla ders ve not tutan kayıt tablosu önce satırlara bölünür (1NF) ve bileşik anahtar (ÖğrenciNo, DersKodu) tanımlanır. Ardından öğrenci adı ve ders bilgileri ayrı tablolara alınır (2NF). Son olarak eğitmenin odası derse değil eğitmene bağlı olduğu için eğitmenler ayrı tabloya taşınır (3NF). Sonuçta Öğrenciler, Eğitmenler, Dersler ve Kayıtlar olmak üzere dört tablo oluşur; bir eğitmen odasını değiştirdiğinde yalnızca tek satır güncellenir. Ayrılan tablolar raporlama sırasında JOIN ile yeniden birleştirilir.
Örnek: DAĞITIM tablosu
DAĞITIM (müşteri_no, şehir_kodu, şehir_adı, gönderi_no, miktar) tablosunda müşteri_no → şehir kısmi, şehir_kodu → şehir_adı geçişli bağımlılıktır; miktar ise anahtarın tamamına bağlıdır. 2NF'de MÜŞTERİLER ve MİKTARLAR, 3NF'de ayrıca ŞEHİRLER tablosu oluşturulur. Böylece hiç dağıtım yapılmamış bir şehir de kaydedilebilir ve tek dağıtımı iptal edilen müşterinin bilgisi kaybolmaz.