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ı
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
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
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.
[ 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:
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.
Tekrarlayan Grupların Olmaması: Aynı tür bilgiyi saklamak için açılmış ders1, ders2, ders3 gibi yinelenen sütunlar bulunamaz.
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ı
Tablo 1NF düzeyinde olmalıdır.
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.
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ı
Tablo 2NF düzeyinde olmalıdır.
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.
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 |
Öğ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ı
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.