Normalizasyon (1NF, 2NF, 3NF)

BLP 1005 — Veritabanı Yönetim Sistemleri

Öğr. Gör. Oktay Cesur

2026-09-29

Ele Alınacak Temel Sorular

  • Neden ilişkili bütün verileri tek bir büyük tabloda toplamamalıyız?
  • Güncelleme, ekleme ve silme anomalileri veritabanını nasıl tutarsızlığa sürükler?
  • Fonksiyonel bağımlılık (\(X \rightarrow Y\)) nedir ve neden anlık verilere değil iş kurallarına dayanır?
  • Aday anahtar ve bileşik anahtar nasıl belirlenir?
  • Tabloya otomatik artan yapay bir numara eklemek tasarım arızalarını çözer mi?
  • Birinci Normal Form (1NF) çoklu değerleri ve tekrarlayan grupları nasıl giderir?
  • İkinci Normal Form (2NF) kısmi bağımlılığı hangi mekanizmayla ortadan kaldırır?
  • Üçüncü Normal Form (3NF) geçişli bağımlılığı (\(A \rightarrow B \rightarrow C\)) nasıl ayrıştırır?
  • Tabloları parçalamak bilgi kaybına yol açar mı; kayıpsız ayrıştırma nasıl doğrulanır?
  • Normalizasyon sürecinde en sık tekrarlanan kavramsal yanılgılar nelerdir?

Tek Tabloda Toplama Yaklaşımı ve Mesleki Eğitim Senaryosu

Somut Senaryo: Ders Kayıt ve Başarı Defteri

Bir meslek yüksekokulu programında öğrencilerin kayıtlı oldukları dersleri, dersi yürüten öğretim üyelerini ve dönem sonu notlarını tutmak istiyoruz.

Kurumun İş Kuralları

  • Her öğrencinin bir numarası ve adı vardır.
  • Her dersin bir kodu ve adı vardır.
  • Her ders tek bir öğretim üyesi tarafından yürütülür; her öğretim üyesinin bir sicil numarası, adı ve bağlı olduğu bölüm vardır.
  • Bir öğrenci birden fazla ders alabilir; bir dersi birden fazla öğrenci seçebilir.
  • Bir öğrencinin bir dersten aldığı başarı notu, o öğrenciye ve o derse özgüdür.

İlk Akla Gelen Çözüm: Tek Parçalı Kayıt Defteri

kayit_defteri(ogrenci_numarasi, ogrenci_adi, alinan_dersler, not_listesi)

Hücrede Çoklu Değer Çıkmazı: Atomik Olmayan Veri

kayit_defteri Tablosunun Veri Durumu

ogrenci_numarasi ogrenci_adi alinan_dersler not_listesi
101 Ahmet Yılmaz BLP1005, MAT1002 85, 70
102 Ayşe Kaya BLP1005 90
103 Mehmet Demir MAT1002 65

Karşılaşılan İlk Tıkanma: Atomiklik İhlali

  • alinan_dersler ve not_listesi hücrelerinde virgülle ayrılmış birden fazla değer yer almaktadır.
  • Sorgulama Güçlüğü: “Yalnızca MAT1002 dersini alan öğrencileri listele” sorgusu standart bir sütun eşitliği (WHERE ders = 'MAT1002') ile çalışamaz; metin arama ve parçalama gerektirir.
  • Güncelleme Riski: Ahmet’in MAT1002 notunu 75 yapmak istediğimizde hücre içindeki metin dizisini programlama katmanında ayıklamak gerekir.

Hücreleri Atomik Yapmak Çözüm mü? Düz Tablo ve Veri Tekrarı

Satırlara Dağıtılmış Düz Tablo Şeması

kayit(ogrenci_numarasi, ogrenci_adi, ders_kodu, ders_adi,
      ogretim_uyesi_no, ogretim_uyesi_adi, ogretim_uyesi_bolumu, basari_notu)

Tablonun Veri Durumu

ogrenci_numarasi ogrenci_adi ders_kodu ders_adi ogretim_uyesi_no ogretim_uyesi_adi ogretim_uyesi_bolumu basari_notu
101 Ahmet Yılmaz BLP1005 Veritabanı Sistemleri 501 Dr. Can Aksoy Bilgisayar Programcılığı 85
101 Ahmet Yılmaz MAT1002 Matematik II 502 Doç. Elif Demir Temel Bilimler 70
102 Ayşe Kaya BLP1005 Veritabanı Sistemleri 501 Dr. Can Aksoy Bilgisayar Programcılığı 90
103 Mehmet Demir MAT1002 Matematik II 502 Doç. Elif Demir Temel Bilimler 65

Durum: Artık her hücre atomiktir (tekildir). Ancak tabloyu tek bir yapıda tutma ısrarı, bu kez devasa bir veri tekrarı ve yönetim arızaları üretmiştir.

Tek Tablo Israrının Faturası: Üç Büyük Anomali

[ Tek Parçalı Denormalize Tablo ]
  ├── 1. Güncelleme Anomalisi ──> Bir ders veya hoca bilgisi yüzlerce satırda tekrar eder;
  │                               bazıları güncellenip bazıları unutulunca sistem çelişkiye düşer.
  ├── 2. Ekleme Anomalisi     ──> Henüz öğrencisi olmayan yeni bir ders veya öğretim üyesi,
  │                               öğrenci numarası (PK parçası) boş bırakılamayacağı için kaydedilemez.
  └── 3. Silme Anomalisi      ──> Tek bir öğrencinin kaydı silindiğinde, o dersin ve dersi yürüten
                                  öğretim üyesinin tüm kurumsal bilgileri de kazara yok olur.

Somut Örnekler

  • Güncelleme: Dr. Can Aksoy unvan değiştirdiğinde, dersi alan yüz öğrencinin yüz satırının birden güncellenmesi gerekir. Dokümanlardan biri atlanırsa aynı kişi için iki farklı kayıt kalır.
  • Ekleme: Yeni açılan PRG1004 dersini henüz öğrenci seçmediği için sisteme giremeyiz; çünkü ogrenci_numarasi alanı zorunludur ve boş kalamaz.
  • Silme: 103 numaralı Mehmet Demir ayrıldığında MAT1002 dersini alan başka öğrenci yoksa, ders ve hoca envanteri sistemden tamamen silinir.

Normalizasyonun Temel Pusulası: Fonksiyonel Bağımlılık

Fonksiyonel Bağımlılık (Functional Dependency) Nedir?

Normalizasyon, tabloları sezgisel tahminlerle veya gelişigüzel bölmek değildir. Sütunların hangi tablolarda toplanacağını belirleyen matematiksel ilişki fonksiyonel bağımlılıktır.

Tanım ve Matematiksel Gösterim

Bir tabloda \(X\) ve \(Y\) sütun grupları olsun. Eğer \(X\)’in aldığı her bir değer için \(Y\)’nin veritabanında her zaman tek bir geçerli değeri bulunuyorsa, “\(Y\) sütunu \(X\)’e fonksiyonel olarak bağımlıdır” denir:

\[ X \rightarrow Y \]

  • Okunuşu: “X, Y’yi belirler” veya “Y, X’e bağımlıdır”.

Belirleyici İlke: Veri Değil, İş Kuralı

  • Bir fonksiyonel bağımlılık, tablodaki o anlık birkaç satıra bakılarak “bakın burada değerler çakışmamış” denilerek kurulamaz.
  • Bağımlılıklar, doğrudan kurumun değişmez iş kurallarından ve alan kısıtlarından türetilir.

Senaryodaki Fonksiyonel Bağımlılıkların Çıkarımı

İş Kuralı 1: Her öğrenci numarasının tek bir adı vardır.
             ogrenci_numarasi ──> ogrenci_adi

İş Kuralı 2: Her ders kodunun tek bir adı ve tek bir öğretim üyesi vardır.
             ders_kodu ──> ders_adi, ogretim_uyesi_no

İş Kuralı 3: Her öğretim üyesinin tek bir adı ve tek bir bölümü vardır.
             ogretim_uyesi_no ──> ogretim_uyesi_adi, ogretim_uyesi_bolumu

İş Kuralı 4: Not kime aittir?
             Yalnızca ogrenci_numarasi notu belirleyemez (birden çok dersi var).
             Yalnızca ders_kodu notu belirleyemez (derste birden çok öğrenci var).
             (ogrenci_numarasi, ders_kodu) ──> basari_notu

Formel Fonksiyonel Bağımlılıklar

\[ \text{ogrenci\_numarasi} \rightarrow \text{ogrenci\_adi} \] \[ \text{ders\_kodu} \rightarrow \text{ders\_adi, ogretim\_uyesi\_no} \] \[ \text{ogretim\_uyesi\_no} \rightarrow \text{ogretim\_uyesi\_adi, ogretim\_uyesi\_bolumu} \] \[ (\text{ogrenci\_numarasi, ders\_kodu}) \rightarrow \text{basari\_notu} \]

Satır Kimliğini Kurmak: Aday Anahtarlar ve Bileşik Anahtar

kayit Tablosunda Tekil Anahtar Arayışı

kayit tablosundaki bir satırı diğer bütün satırlardan kesin olarak ayırt etmek için hangi sütun gereklidir?

  • ogrenci_numarasi tek başına anahtar olamaz: Bir öğrenci birden fazla ders alabildiği için tabloda aynı öğrenci numarasına sahip birden çok satır yer alır (101 numaralı Ahmet iki satırdadır).
  • ders_kodu tek başına anahtar olamaz: Bir dersi birden fazla öğrenci seçebildiği için aynı ders kodu birden çok satırda tekrarlanır (BLP1005 iki satırdadır).
  • (ogrenci_numarasi, ders_kodu) İkilisi: Bir öğrencinin aynı derse ait yalnızca tek bir nihai not kaydı bulunabileceği için bu çift tablodaki her satırı benzersiz biçimde tanımlar.

Tablonun Birincil Anahtarı (Primary Key)

\[ \text{Birincil Anahtar} = (\text{ogrenci\_numarasi, ders\_kodu}) \quad \text{[Bileşik Anahtar (Composite Key)]} \]

“Yapay Anahtar Ekleyelim” Yanılgısı

Sıkça Düşülen Tuzak: Otomatik Artan Sayaç Eklemek

kayit(kayit_id [PK], ogrenci_numarasi, ogrenci_adi, ders_kodu, ders_adi, ...)
[ kayit_id = 1 ] ──> 101, Ahmet Yılmaz, BLP1005, Veritabanı Sistemleri, 501, Dr. Can Aksoy, ...
[ kayit_id = 2 ] ──> 101, Ahmet Yılmaz, MAT1002, Matematik II,          502, Doç. Elif Demir, ...
[ kayit_id = 3 ] ──> 102, Ayşe Kaya,    BLP1005, Veritabanı Sistemleri, 501, Dr. Can Aksoy, ...

Neden Çözüm Değildir?

  • kayit_id sütunu satıra teknik bir tekillik kazandırır; ancak tablodaki fonksiyonel bağımlılıkları değiştirmez.
  • ders_adi hâlâ ders_kodu’na bağımlıdır.
  • ogrenci_adi hâlâ ogrenci_numarasi’na bağımlıdır.
  • Yüz öğrenci BLP1005 aldığında ders adı ve öğretim üyesi bilgileri yine yüz kez tekrar eder; güncelleme, ekleme ve silme anomalileri aynen devam eder.

Kavramsal Çıkarım: Yapay bir numara eklemek tasarımı normalize etmez. Çözüm yapay sütun eklemekte değil, bağımlılıkları ait oldukları bağımsız tablolara dağıtmaktadır.

Birinci Normal Form (1NF): Atomiklik ve Tekrarlayan Grupların Sonu

1NF Koşulları

Bir tablonun Birinci Normal Form (1NF) düzeyinde olması için iki temel kuralı sağlaması gerekir:

  1. Değerlerin Atomik Olması: Tablodaki her sütun bölünemez, tekil değerler taşımalıdır. Virgülle ayrılmış listeler, diziler veya birleşik yapılar hücre içinde yer alamaz.
  2. Tekrarlayan Grupların Olmaması: Aynı tür bilgiyi saklamak için açılmış ders1, ders2, ders3 gibi yinelenen sütunlar bulunamaz.

1NF Düzeyindeki Tablomuz

kayit(ogrenci_numarasi, ogrenci_adi, ders_kodu, ders_adi,
      ogretim_uyesi_no, ogretim_uyesi_adi, ogretim_uyesi_bolumu, basari_notu)
  • Birincil Anahtar: (ogrenci_numarasi, ders_kodu)
  • Durum: Çoklu değerler satırlara dağıtılmıştır, her hücre atomiktir.

1NF’nin Sınırı: Atomiklik sağlanmıştır; ancak bileşik anahtarın yalnızca bir parçasına bağlı olan alanlar hâlâ bu tablonun içindedir. Dolayısıyla veri tekrarları ve anomaliler sürmektedir.

1NF Tablosunun Zayıf Halkası: Kısmi Bağımlılık

İkinci Normal Form (2NF) Kuralı

  1. Tablo 1NF düzeyinde olmalıdır.
  2. Tablodaki anahtar-olmayan her sütun, birincil anahtarın tamamına tam fonksiyonel bağımlı olmalıdır.
    • Yani birincil anahtarın yalnızca bir parçasına bağlı hiçbir sütun (kısmi bağımlılık - partial dependency) bulunmamalıdır.

Doğrudan Kural: Tek Sütunlu Anahtar ve 2NF

Bir tablonun birincil anahtarı tek bir sütundan oluşuyorsa, anahtarın “parçası” olamaz. Dolayısıyla birincil anahtarı tek sütunlu olan ve 1NF sağlayan her tablo doğrudan 2NF koşulunu da sağlar. Kısmi bağımlılık riski yalnızca bileşik anahtarlı tablolarda ortaya çıkar.

1NF Tablomuzdaki Bağımlılık Sınaması

  • ogrenci_adi: Öğrenci adını bilmek için ders koduna gerek yoktur. Yalnızca ogrenci_numarasi’na bağlıdır \(\rightarrow\) Kısmi Bağımlılık.
  • ders_adi, ogretim_uyesi_no, ogretim_uyesi_adi, ogretim_uyesi_bolumu: Bu bilgiler öğrenciye bağlı değildir. Yalnızca ders_kodu’na bağlıdır \(\rightarrow\) Kısmi Bağımlılık.
  • basari_notu: Yalnızca öğrenci veya ders yetmez; ikisi birlikte bilinmelidir \(\rightarrow\) Tam Fonksiyonel Bağımlılık.

İkinci Normal Form (2NF): Kısmi Bağımlılığı Ayrıştırma Mekanizması

Ayrıştırma Kuralı

  • Anahtarın yalnızca bir parçasına bağlı olan sütunlar, bağımlı oldukları o anahtar parçasıyla birlikte yeni birer tabloya taşınır.
  • Bileşik anahtarın tamamına bağlı olan sütunlar ise orijinal tabloda kalır.
[ 1NF: kayit Tablosu ]
  ├── ogrenci_numarasi ──> ogrenci_adi                ==> Ayrılır: ogrenci Tablosu
  ├── ders_kodu        ──> ders_adi, ogretim_uyesi... ==> Ayrılır: ders Tablosu
  └── (ogrenci_numarasi, ders_kodu) ──> basari_notu   ==> Kalır:   kayit Tablosu

2NF Sonucunda Üretilen Tablolar

  1. ogrenci Tablosu: ogrenci(ogrenci_numarasi, ogrenci_adi)
    • Birincil Anahtar: ogrenci_numarasi
  2. ders Tablosu: ders(ders_kodu, ders_adi, ogretim_uyesi_no, ogretim_uyesi_adi, ogretim_uyesi_bolumu)
    • Birincil Anahtar: ders_kodu
  3. kayit Tablosu: kayit(ogrenci_numarasi, ders_kodu, basari_notu)
    • Birincil Anahtar: (ogrenci_numarasi, ders_kodu)
    • Yabancı Anahtarlar: ogrenci_numarasi \(\rightarrow\) ogrenci, ders_kodu \(\rightarrow\) ders

2NF Sonrası Durum: Tablolar ve Çözülen Problemler

2NF Uyumluluk Kontrolü

  • ogrenci tablosu: Anahtar tek sütunludur; kısmi bağımlılık olamaz \(\rightarrow\) 2NF sağlandı.
  • ders tablosu: Anahtar tek sütunludur; kısmi bağımlılık olamaz \(\rightarrow\) 2NF sağlandı.
  • kayit tablosu: Anahtar bileşiktir, fakat basari_notu anahtarın tamamına tam bağımlıdır \(\rightarrow\) 2NF sağlandı.

Elde Edilen İyileşmeler

  • Öğrencinin adı artık aldığı ders sayısı kadar tekrar etmez; ogrenci tablosunda tek bir satırda durur.
  • Yeni bir öğrenci henüz hiç ders seçmemiş olsa bile sisteme kaydedilebilir (ekleme anomalisi öğrenci için çözüldü).
  • Bir öğrenci kaydını sildirdiğinde ders tablosundaki kayıtlar etkilenmez.

Hâlâ Çözülmeyen Problem Nerede Saklanıyor?

ders tablosuna yakından bakalım: Dr. Can Aksoy iki farklı ders yürütürse ne olur?

2NF Tablosunda Gizlenen Risk: Geçişli Bağımlılık

Üçüncü Normal Form (3NF) Kuralı

  1. Tablo 2NF düzeyinde olmalıdır.
  2. Tablodaki anahtar-olmayan hiçbir sütun, anahtar-olmayan başka bir sütuna fonksiyonel bağımlı olmamalıdır.
    • Yani tabloda geçişli bağımlılık (transitive dependency) bulunmamalıdır.

Geçişli Bağımlılık Mekanizması (\(A \rightarrow B \rightarrow C\))

Eğer \(A \rightarrow B\) ve \(B \rightarrow C\) bağımlılıkları varsa, mantıksal olarak \(A \rightarrow C\) geçişi doğar. Burada \(A\) birincil anahtar, \(B\) ve \(C\) anahtar-olmayan sütunlar ise \(C\), anahtara dolaylı olarak bağlıdır.

[ ders Tablosu Analizi ]
  ders_kodu (PK) ──> ogretim_uyesi_no ──> ogretim_uyesi_adi, ogretim_uyesi_bolumu
        │                                                     ▲
        └──────────────────(Geçişli Bağımlılık)───────────────┘

Bu Tabloda Süren Anomaliler

  • Veri Tekrarı: Dr. Can Aksoy iki farklı ders yürüttüğünde adı ve bölümü iki kez yazılır.
  • Güncelleme: Hoca bölüm değiştirdiğinde birden çok ders satırı güncellenmelidir.
  • Ekleme: Henüz üzerine atanmış dersi bulunmayan yeni bir öğretim üyesi ders_kodu olmadan sisteme eklenemez.

Üçüncü Normal Form (3NF): Geçişli Bağımlılığı Ayrıştırma Mekanizması

Ayrıştırma Kuralı

  • Dolaylı olarak belirlenen sütunlar, kendilerini doğrudan belirleyen ara sütunla birlikte ayrı bir tabloya çıkarılır.
  • Ara sütun yeni tablonun birincil anahtarı (PK) olurken, orijinal tabloda bir yabancı anahtar (FK) olarak bırakılır.
[ 2NF: ders Tablosu ]
  ├── ogretim_uyesi_no ──> ogretim_uyesi_adi, ogretim_uyesi_bolumu
  │   ==> Ayrılır: ogretim_uyesi(ogretim_uyesi_no [PK], ogretim_uyesi_adi, ogretim_uyesi_bolumu)
  └── ders_kodu ──> ders_adi, ogretim_uyesi_no [FK]
      ==> Kalır:   ders(ders_kodu [PK], ders_adi, ogretim_uyesi_no [FK])

3NF Sonucunda Oluşan Dört Tablolu Nihai Mimari

  1. ogrenci: (ogrenci_numarasi [PK], ogrenci_adi)
  2. ogretim_uyesi: (ogretim_uyesi_no [PK], ogretim_uyesi_adi, ogretim_uyesi_bolumu)
  3. ders: (ders_kodu [PK], ders_adi, ogretim_uyesi_no [FK])
  4. kayit: (ogrenci_numarasi [PK, FK], ders_kodu [PK, FK], basari_notu)

Bağımlılık ve Mimari Dönüşüm Şeması

BAŞLANGIÇ (1NF: Tek Büyük Tablo):
kayit( [ogrenci_numarasi, ders_kodu] [PK], ogrenci_adi, ders_adi, ogretim_uyesi_no, ogretim_uyesi_adi, ogretim_uyesi_bolumu, basari_notu )
       │                     │
       ├──(Kısmi Bağımlılık)─┼──────────> ogrenci_adi
       │                     └──(Kısmi)─> ders_adi, ogretim_uyesi_no, ogretim_uyesi_adi, ogretim_uyesi_bolumu
       └────────────────────────(Tam)───> basari_notu

DÖNÜŞÜM 1 (2NF: Kısmi Bağımlılıklar Giderildi):
ogrenci( ogrenci_numarasi [PK], ogrenci_adi )
ders( ders_kodu [PK], ders_adi, ogretim_uyesi_no, ogretim_uyesi_adi, ogretim_uyesi_bolumu )
      │                         │
      └──────(Geçişli Bağ.)─────┴───────> ogretim_uyesi_adi, ogretim_uyesi_bolumu
kayit( ogrenci_numarasi [PK, FK], ders_kodu [PK, FK], basari_notu )

SONUÇ (3NF: Geçişli Bağımlılıklar Giderildi - Dört Temiz Varlık/İlişki):
ogrenci( ogrenci_numarasi [PK], ogrenci_adi )
ogretim_uyesi( ogretim_uyesi_no [PK], ogretim_uyesi_adi, ogretim_uyesi_bolumu )
ders( ders_kodu [PK], ders_adi, ogretim_uyesi_no [FK] )
kayit( ogrenci_numarasi [PK, FK], ders_kodu [PK, FK], basari_notu )

Doğrulayalım: Ayrıştırma Bilgi Kaybettirir mi?

Eleştirel Soru

Tek bir tabloyu dört ayrı tabloya parçaladık. Acaba bu süreçte orijinal verilerden bir şey kaybettik mi? Tabloları yabancı anahtarlar üzerinden birleştirdiğimizde başlangıçtaki satırları eksiksiz elde edebilir miyiz?

3NF Tablolarımızın Somut Veri Durumu

Tablo: ogrenci | ogrenci_numarasi (PK) | ogrenci_adi | | — | — | | 101 | Ahmet Yılmaz | | 102 | Ayşe Kaya | | 103 | Mehmet Demir |

Tablo: ogretim_uyesi | ogretim_uyesi_no (PK) | ogretim_uyesi_adi | ogretim_uyesi_bolumu | | — | — | — | | 501 | Dr. Can Aksoy | Bilgisayar Programcılığı | | 502 | Doç. Elif Demir | Temel Bilimler |

Tablo: ders | ders_kodu (PK) | ders_adi | ogretim_uyesi_no (FK) | | — | — | — | | BLP1005 | Veritabanı Sistemleri | 501 | | MAT1002 | Matematik II | 502 |

Tablo: kayit | ogrenci_numarasi (PK, FK) | ders_kodu (PK, FK) | basari_notu | | — | — | — | | 101 | BLP1005 | 85 | | 101 | MAT1002 | 70 | | 102 | BLP1005 | 90 | | 103 | MAT1002 | 65 |

Doğrulama Adımları: Kayıpsız Yeniden Kurulum

Adım Adım Eşleştirme Mekanizması

  1. kayit tablosunun ilk satırını alalım: (101, BLP1005, 85)
  2. Öğrenciyi Çözümleme: ogrenci_numarasi = 101 \(\rightarrow\) ogrenci tablosundaki birincil anahtarla eşleşir: \[\rightarrow \text{Ahmet Yılmaz}\]
  3. Dersi Çözümleme: ders_kodu = BLP1005 \(\rightarrow\) ders tablosundaki birincil anahtarla eşleşir: \[\rightarrow \text{Veritabanı Sistemleri, ogretim\_uyesi\_no} = 501\]
  4. Öğretim Üyesini Çözümleme: ogretim_uyesi_no = 501 \(\rightarrow\) ogretim_uyesi tablosundaki birincil anahtarla eşleşir: \[\rightarrow \text{Dr. Can Aksoy, Bilgisayar Programcılığı}\]

Yeniden Kurulan Orijinal Satır

101 | Ahmet Yılmaz | BLP1005 | Veritabanı Sistemleri | 501 | Dr. Can Aksoy | Bilgisayar Programcılığı | 85

Doğrulama Sonuçları

  • Bilgi Kaybı Yoktur (Lossless Decomposition): Orijinal tablodaki hiçbir sütun ve değer kaybolmamıştır; yabancı anahtarlarla eksiksiz geri çatılabilmektedir.
  • Sahte Kayıt Türememiştir (No Spurious Tuples): Eşleştirmeler tekil birincil anahtarlar üzerinden yapıldığı için Ahmet’in almadığı bir dersle veya Doç. Elif Demir ile sahte bir biçimde eşleşmesi imkansızdır.
  • Bütünlük Korunmuştur: Tüm ilişkiler yabancı anahtar köprüleriyle matematiksel olarak güvenceye alınmıştır.

Sık Yapılan Hatalar: Anahtar ve Bağımlılık Yanılgıları

1. Yapay Tekil Anahtarın Normalizasyonu Çözdüğünü Sanmak

  • Yanılgı: id sütunu ekleyince tablonun normalize olduğunu sanmak.
  • Doğrusu: Yapay anahtar fonksiyonel bağımlılıkları değiştirmez; ders_adi yine ders_kodu’na bağımlı kalır, tekrar sürer.

2. Tek Sütunlu Birincil Anahtarda Kısmi Bağımlılık Aramak

  • Yanılgı: Tek sütunlu anahtarlı tablolarda 2NF ihlali aramaya çalışmak.
  • Doğrusu: Tek sütun “parça” olamaz; 1NF sağlayan tek-sütunlu-PK tablo zaten doğrudan 2NF’dir.

3. Bağımlılığı İş Kuralı Yerine Anlık Verilerden Çıkarmak

  • Yanılgı: Örnek satırlara bakıp “burada tekrar yok, demek ki belirler” demek.
  • Doğrusu: Anlık verideki rastlantısal tekillik kanıt değildir; bağımlılık daima iş kuralından çıkarılır.

Sık Yapılan Hatalar: Ayrıştırma ve İlişki Yanılgıları

4. Normalizasyonu Yalnızca Tablo Bölmek Sanıp Yabancı Anahtarı Unutmak

  • Yanılgı: Tabloyu bölerken aradaki ilişki köprüsünü kurmayı atlamak.
  • Doğrusu: FK sütunu konulmazsa bağ kalıcı olarak kaybolur; ayrıştırma FK köprüsüyle yapılır.

5. Geçişli Bağımlılığı Yabancı Anahtar İlişkisiyle Karıştırmak

  • Yanılgı: Tabloda FK görünce geçişli bağımlılık ihlali sanmak.
  • Doğrusu: FK meşru bir köprüdür; ihlal, anahtar-olmayan bir alanın başka anahtar-olmayan alanı belirlemesidir.

Kaynak ve Kapsam Notu

Kapsam ve Sınırlar

  • Bu derste ilişkisel veritabanı tasarımının temelini oluşturan Birinci Normal Form (1NF), İkinci Normal Form (2NF) ve Üçüncü Normal Form (3NF) kuralları işlenmiştir.
  • Kapsam Dışı Bırakılanlar: Boyce-Codd Normal Formu (BCNF), Dördüncü Normal Form (4NF), Beşinci Normal Form (5NF) ve biçimsel aksiyom ispatları (Armstrong aksiyomları) başlangıç düzeyindeki bu meslek yüksekokulu dersinin öğretim sınırlarının dışında tutulmuştur.

Kaynak Uyarlaması

  • Ders kaynağında (“Veritabanı Mantığı ve Kavramları”) normalizasyon konusu biçimsel kurallara (1NF, 2NF, 3NF tanımları ve fonksiyonel bağımlılık mekaniği) girilmeden, yalnızca departman bilgilerinin ayrıştırılması üzerinden sezgisel olarak ele alınmıştır.
  • Buradaki kavramsal akış, fonksiyonel bağımlılık çıkarımları ve tek adımlı mesleki eğitim senaryosu (öğrenci-ders-öğretim üyesi-not), kaynağın arıza-çözüm motivasyonundan faydalanılarak ders hedeflerine uygun biçimde özgün olarak yapılandırılmıştır.