Skip to main content

🧩 Veritabanı Normalizasyonu ve Örnekli Uygulama Rehberi

💡 Bu Rehberde Ne Öğreneceksiniz?

Bu rehberde veritabanı normalizasyonu kavramını temelden öğreneceksiniz.
Amacımız, veri tekrarını azaltmak, veri bütünlüğünü güçlendirmek ve ölçeklenebilir, verimli veritabanı yapıları kurmanızı sağlamak.

Adım adım şu konulara değineceğiz:

  • Normalizasyonun amacı ve neden gerekli olduğu
  • 1NF, 2NF, 3NF ve BCNF aşamalarının farkları
  • Her form için pratik SQL örnekleri
  • Denormalizasyonun ne zaman tercih edileceği

🔍 Kısacası: Bu rehber, düzensiz verileri nasıl mantıklı tablolara dönüştüreceğinizi öğretir.


🧠 Veritabanı Normalizasyonu Nedir?

Normalizasyon, ilişkisel veritabanlarında verileri düzenleyip tekrarı azaltmak ve tutarlılığı artırmak için kullanılan sistematik bir tasarım tekniğidir.
Amaç, büyük bir tabloyu daha küçük, anlamlı ve ilişkili tablolara bölmektir.

🎯 Temel Hedefler

  1. Veri Tekrarını Önlemek: Aynı veriyi birden fazla yerde saklamamak.
  2. Veri Bütünlüğü Sağlamak: Tablolar arası ilişkileri netleştirerek hatalı veri girişlerini önlemek.
  3. Anormallikleri Engellemek:
    • Ekleme anormalliği: Eksik veri yüzünden yeni kayıt eklenememesi.
    • Güncelleme anormalliği: Aynı bilginin birçok yerde değiştirilmesi gerekmesi.
    • Silme anormalliği: Bir kaydın silinmesiyle istenmeyen verilerin de kaybolması.
  4. Sorgu Performansını Artırmak: Düzenli tablolar daha hızlı sorgulanır ve yönetilir.

🧱 Normalizasyon Aşamaları

Normalizasyon, birbirini takip eden dört temel aşamadan oluşur:
1NF → 2NF → 3NF → BCNF

1️⃣ Birinci Normal Form (1NF)

Kural: Her sütun atomik (tekil) bir değer içermelidir.

Müşteri IDMüşteri AdıSatın Alınan Ürünler
101Ahmet KayaLaptop, Mouse
102Elif DemirTablet

Sorun: “Satın Alınan Ürünler” hücresi birden fazla değer içeriyor.

1NF’ye Dönüştürülmüş Hali:

Müşteri IDMüşteri AdıÜrün
101Ahmet KayaLaptop
101Ahmet KayaMouse
102Elif DemirTablet
CREATE TABLE MusteriUrunleri (
MusteriID INT,
MusteriAdi VARCHAR(100),
Urun VARCHAR(100)
);

🧩 Bu tablo artık 1NF’e uygundur. Her hücre tek bir değere sahiptir.


2️⃣ İkinci Normal Form (2NF)

Kural: Tablo 1NF olmalı ve kısmi bağımlılıklar kaldırılmalıdır.

Sipariş ID Müşteri ID Müşteri Adı Ürün 201 101 Ahmet Kaya Laptop 202 101 Ahmet Kaya Mouse

Sorun: “Müşteri Adı” sadece “Müşteri ID”ye bağlı, birleşik anahtara değil.

2NF’ye Dönüşüm:

Müşteri bilgileri ayrı bir tabloya taşınır.

CREATE TABLE Musteriler (
MusteriID INT PRIMARY KEY,
MusteriAdi VARCHAR(100)
);
CREATE TABLE Siparisler (
SiparisID INT PRIMARY KEY,
MusteriID INT,
Urun VARCHAR(100),
FOREIGN KEY (MusteriID) REFERENCES Musteriler(MusteriID)
);

🧠 Artık kısmi bağımlılıklar yok. Müşteri bilgisi tek bir yerde saklanıyor.


3️⃣ Üçüncü Normal Form (3NF)

Kural: Tablo 2NF olmalı ve geçişli bağımlılıklar kaldırılmalıdır.

Sipariş IDÜrünTedarikçi
201LaptopHP
202MouseLogitech

Sorun: “Tedarikçi”, doğrudan “Ürün”e bağlı. Bu, geçişli bağımlılıktır.

3NF’ye Dönüşüm: Ürün ve tedarikçi bilgilerinin ayrı tablolara taşınması gerekir.

CREATE TABLE Tedarikciler (
TedarikciID INT PRIMARY KEY,
TedarikciAdi VARCHAR(100)
);
CREATE TABLE Urunler (
UrunID INT PRIMARY KEY,
UrunAdi VARCHAR(100),
TedarikciID INT,
FOREIGN KEY (TedarikciID) REFERENCES Tedarikciler(TedarikciID)
);

💡 Artık her sütun sadece anahtarına bağlı. Veri bütünlüğü tam.


4️⃣ Boyce-Codd Normal Form (BCNF)

Kural: Her fonksiyonel bağımlılıkta belirleyici (X) bir süper anahtar olmalıdır.

Öğrenci IDDersEğitmen
1MatematikDr. Yılmaz
2MatematikDr. Yılmaz

Sorun: Ders → Eğitmen ilişkisi var ama “Ders” süper anahtar değil.

BCNF’ye Dönüşüm:

CREATE TABLE OgrenciDersler (
OgrenciID INT,
Ders VARCHAR(100),
PRIMARY KEY (OgrenciID, Ders)
);
CREATE TABLE DersEgitmenler (
Ders VARCHAR(100) PRIMARY KEY,
Egitmen VARCHAR(100)
);

🧩 BCNF, 3NF’den daha katı kurallara sahiptir ve karmaşık bağımlılıkları ortadan kaldırır.

⚖️ Normalizasyon ve Denormalizasyon Dengesi Kriter Normalizasyon Denormalizasyon Veri Tekrarı Az Fazla Tutarlılık Yüksek Orta Performans Güncellemelerde hızlı Okumalarda hızlı Kullanım Alanı İşlem tabanlı sistemler Analitik sistemler

🚀 İpucu: Raporlama veya analitik sistemlerde denormalizasyon, okuma performansını ciddi ölçüde artırabilir.


💬 Sıkça Sorulan Sorular (SSS)

  1. Normalizasyonda hangi seviye genelde yeterlidir?

Çoğu sistemde 3NF yeterlidir. BCNF yalnızca karmaşık bağımlılık durumlarında gerekir.

  1. Kısmi ve geçişli bağımlılık farkı nedir?

Kısmi bağımlılık, birleşik anahtarın bir kısmına bağlılık; geçişli bağımlılık, anahtar olmayan bir alanın başka bir anahtar olmayan alana bağımlılığıdır.

  1. BCNF her zaman gerekli midir?

Hayır. BCNF genellikle özel, çok karmaşık veri ilişkilerinde tercih edilir.

  1. NoSQL veritabanlarında normalizasyon geçerli midir?

Genel olarak hayır. NoSQL yapılar denormalizasyonu performans için tercih eder.

  1. Normalizasyon performansı düşürür mü?

Çok fazla tabloya bölünmesi join işlemlerini artırır; ancak veri bütünlüğü açısından bu kayıp kabul edilebilir düzeydedir.


🏁 Sonuç

Veritabanı normalizasyonu, düzenli, güvenilir ve ölçeklenebilir sistemlerin temelidir. Doğru uygulandığında, hem verimliliği artırır hem de veri hatalarını ortadan kaldırır.

💡 Projelerinizde bu ilkeleri uygulayarak güçlü veri temelleri kurabilirsiniz. Rabisu Bulut üzerinde kendi veritabanınızı oluşturun ve normalizasyonun farkını deneyimleyin.