Kanonik örtü ve normal formlar: 1NF, 2NF, 3NF, BCNF
Gereksiz öznitelikleri atıp kanonik örtüyü bulmayı ve bir şemanın hangi normal formda olduğunu adım adım belirlemeyi öğrenirsin. 'What is the highest normal form?' sorusunun reçetesi bu sayfada.
Geçen hafta closure ve anahtar bulmayı gördün. Bu hafta onları kullanarak iki şey yapacaksın: FD kümesini en sade hâline indirmek (kanonik örtü) ve bir şemanın en yüksek normal formunu bulmak. Sınavda “What is the highest normal form of R?” sorusu neredeyse garantidir. Reçete hep aynı:
- Tüm aday anahtarları bul.
- Asal (prime) öznitelikleri yaz: en az bir aday anahtarda geçenler.
- Her aşikar olmayan FD’yi sırayla BCNF, 3NF, 2NF testinden geçir.
Kanonik örtü (canonical cover)
Aynı bilgiyi taşıyan çok sayıda FD kümesi olabilir. Kanonik örtü , ile eşdeğer (aynı ) ama gereksiz hiçbir şey içermeyen kümedir:
- Hiçbir FD’de gereksiz öznitelik (extraneous attribute) yok.
- Her sol taraf tektir ( ve yerine ).
Gereksiz öznitelik testi
| Nerede | Soru | Test |
|---|---|---|
| Sol taraf: ‘de B | A tek başına C’yi belirler mi? | ‘yı orijinal F altında hesapla, C içinde mi? |
| Sağ taraf: ‘de C | C’yi bu FD olmadan da türetebilir miyim? | FD’yi yap, yeni küme altında C içeriyor mu? |
TUZAK · hangi F altında? Sol taraf testinde closure değiştirilmemiş F ile alınır. Sağ taraf testinde ise FD’yi kısaltılmış hâliyle küme içine koyup closure alırsın. İkisini karıştırmak yanlış “gereksiz” kararları doğurur.
Çözümlü örnek
1) Sağları böl: A -> B, A -> D, AB -> C, C -> D, B -> D
2) Sol taraflar: AB -> C içinde B gereksiz mi?
{A}+ (F altında): A -> B, A -> D, AB -> C → ABCD C var → B gereksiz
A gereksiz mi? {B}+ = BD, C yok → değil
FD: A -> C
3) Gereksiz FD'ler: A -> D atılırsa: {A}+ = A -> B, A -> C, C -> D → ABCD D var → at
B -> D atılırsa: {B}+ = B, D yok → gerekli
C -> D atılırsa: {C}+ = C, D yok → gerekli
A -> B atılırsa: {A}+ = ACD, B yok → gerekli
A -> C atılırsa: {A}+ = ABD, C yok → gerekli
4) Birleştir: Fc = { A -> BC, B -> D, C -> D }
Son kontrol: ile eşdeğer mi? ‘deki her FD ‘den türetiliyor ve tersi de doğru. Eşdeğer.
İPUCU · kanonik örtü tek değildir. Gereksiz testi farklı sırada yaparsan farklı ama eşdeğer bir bulabilirsin. Sınavda adımlarını yazarsan iki cevap da kabul görür. Bu sayfadaki örnekler soldan sağa sırayla çözüldü.
Birinci normal form (1NF)
Bir şema, her özniteliğin değer alanı atomik (atomic domain) ise 1NF’dedir: hücrede liste, küme ya da tekrar eden grup yok.
| stu_id | name | phones |
|---|---|---|
| S1 | Ada | 0532 111 22 33, 0216 444 55 66 |
Bu tablo 1NF değil. Düzeltme: student_phone(stu_id, phone) ayrı tablosu, her telefon ayrı satır. İlişkisel modelde her tablo varsayılan olarak 1NF kabul edilir; bundan sonraki formlar FD’lere bakar.
İkinci normal form (2NF)
1NF + hiçbir asal olmayan öznitelik, bir aday anahtarın öz alt kümesine bağlı değil. Bu yasak duruma kısmi bağımlılık (partial dependency) denir.
Üniversite örneği: takes_wide(stu_id, course_id, grade, stu_name, title), FD’ler , , .
Tek anahtar {stu_id, course_id}. stu_name sadece stu_id’ye bağlı, title sadece course_id’ye. İkisi de kısmi bağımlılık: en yüksek 1NF. Geçen haftaki geniş tablonun güncelleme anomalisi tam olarak buradan geliyordu.
Harfli örnek: , . Anahtar AB, kısmi: 1NF.
TUZAK · tek öznitelikli anahtar. Bütün aday anahtarlar tek öznitelikliyse kısmi bağımlılık imkânsız; şema 1NF ise otomatik olarak 2NF’dir. Bu durumda 2NF testini atlayıp doğrudan 3NF’ye bak.
Üçüncü normal form (3NF)
Her aşikar olmayan için şunlardan en az biri doğru olmalı:
- bir süper anahtar, ya da
- asal (prime) bir öznitelik.
Bozan tipik durum geçişli bağımlılık (transitive dependency): anahtar → anahtar olmayan → anahtar olmayan.
Üniversite örneği: student_dept(stu_id, name, dept_name, building), FD’ler , . Anahtar stu_id (tek öznitelik, 2NF otomatik). : dept_name süper anahtar değil, building asal değil. 3NF bozuluyor: en yüksek 2NF.
Harfli örnek: , : anahtar A, geçişli, 2NF.
Boyce-Codd normal form (BCNF)
Her aşikar olmayan için süper anahtar olmalı. 3NF’deki “ya da A asal” kaçış yolu yok. Her BCNF şema 3NF’dir; tersi her zaman doğru değil.
3NF olup BCNF olmayan klasik durum: anahtar olmayan bir öznitelik, bir anahtarın parçasını belirliyor. Üniversite örneği: tutoring(stu_id, subject, tutor_id). Kurallar: her öğretici (tutor) tek konuya bakar, her öğrenci her konu için tek öğreticiyle çalışır.
Anahtarlar: {stu_id, subject} ve {stu_id, tutor_id}. Üç öznitelik de asal. : tutor_id süper anahtar değil, BCNF ihlali. Ama subject asal, 3NF sağlanıyor. En yüksek 3NF.
Harfli karşılığı: , , anahtarlar AB ve AC, sonuç 3NF.
Hepsi bir arada: çözümlü tespit
, .
Anahtarlar: A sağda yok → her anahtarda
{A}+ = A
{A,B}+ = ABCDE anahtar
{A,C}+: C -> D, D -> B, AB -> CDE = ABCDE anahtar
{A,D}+: D -> B, AB -> CDE = ABCDE anahtar
{A,E}+ = AE değil
Asal: A, B, C, D (E asal değil)
AB -> CDE AB süper anahtar BCNF uygun
C -> D C süper anahtar değil BCNF ihlali; D asal → 3NF uygun
D -> B D süper anahtar değil BCNF ihlali; B asal → 3NF uygun
Sonuç: 3NF (BCNF değil)
Bir de BCNF örneği: , . ve ikisi de ABCD: her sol taraf süper anahtar, BCNF. Üniversitenin course(course_id, title, dept_name, credits) ve department(dept_name, building, budget) tabloları da aynı nedenle BCNF: tek FD’leri anahtardan çıkıyor.
TUZAK · parçalarda sadece F’ye bakmak. Tüm şemayı test ederken F’deki FD’lere bakmak yeter. Ama ayrıştırılmış bir parçayı test ederken ‘nın o parçaya izdüşümünü (projection) düşünmen gerekir: parçada görünmeyen bir ara öznitelik üzerinden gelen FD’ler de sayılır. Gelecek hafta bunu kullanacağız.
Normal formlar özet tablosu
| Form | Koşul | Bozan şey |
|---|---|---|
| 1NF | Atomik değerler | Liste, tekrar eden grup |
| 2NF | 1NF + kısmi bağımlılık yok | Anahtarın parçası → asal olmayan |
| 3NF | Her : X süper anahtar ya da A asal | Anahtar olmayan → asal olmayan |
| BCNF | Her : X süper anahtar | Süper anahtar olmayan → herhangi bir şey |
Sık yapılan hatalar
| Yanlış düşünce | Doğrusu |
|---|---|
| Normal formu bulmadan önce anahtarlara bakmamak | Önce tüm aday anahtarlar ve asal öznitelikler |
| “A asal” = A birincil anahtarda | Herhangi bir aday anahtarda geçmesi yeter |
| 3NF ve BCNF aynı şey | 3NF’de sağ taraf asalsa izin var; BCNF’de yok |
| Birden çok aday anahtar BCNF’yi bozar | AB ve CD iki anahtar olabilir, şema yine BCNF |
| Sol taraf gereksiz testini değiştirilmiş F ile yapmak | Orijinal F altında al |
| Kanonik örtü tektir | Sıraya göre farklı ama eşdeğer sonuçlar çıkabilir |
| 2NF bozuksa 3NF olabilir | Formlar iç içe: 3NF olan her şema 2NF’dir |
Kendini test et
Sınavdaki gibi İngilizce sorular. Önce kâğıt kalemle çöz, sonra cevabı aç.
A table student(stu_id, name, phones) stores values like '0532 111 22 33, 0216 444 55 66' in phones. Which normal form does it violate, and what is the usual fix?
Cevabı göster
1NF her hücrede tek, bölünmez (atomic) değer ister. Virgülle ayrılmış liste birden çok değer taşıyor. Çözüm: her telefon için ayrı satır, ayrı tablo: student_phone(stu_id, phone), anahtar (stu_id, phone).
Let . Is extraneous in ? Give the canonical cover.
Cevabı göster
Sol taraftaki B'nin gereksiz olup olmadığını test etmek için B'yi at ve 'yı orijinal F altında hesapla: ile {A,B}, ile {A,B,C}. C içinde, B gereksiz. FD olur. Aynı sol tarafları birleştir: .
Let . Which attribute is extraneous, and what is the canonical cover?
Cevabı göster
Sağ taraftaki C'yi test et: yerine koy, yeni küme altında . C hâlâ çıkıyor, yani gereksiz. Kanonik örtü: , .
Find a canonical cover of .
Cevabı göster
1) Sağları böl: A→C, AC→D, E→A, E→D, E→H.
2) AC→D'de C gereksiz mi? = {A,C,D} (A→C sonra AC→D). Evet: A→D.
3) Gereksiz FD: E→D atılınca = E→A, A→C, A→D ile D yine çıkıyor. E→D gereksiz. Diğerleri gerekli.
4) Birleştir: A→CD, E→AH. Kontrol: yeni küme orijinalle eşdeğer.
Let with . What is the highest normal form of ?
Cevabı göster
A ve B sağda yok, = ABCD: tek anahtar AB. Asal öznitelikler A, B. : B anahtarın öz alt kümesi, D asal değil. Kısmi bağımlılık (partial dependency) var, 2NF bozuluyor. En yüksek: 1NF.
Let with . What is the highest normal form?
Cevabı göster
Anahtar tek öznitelik: A ( = ABCDE). Tek öznitelikli anahtarın öz alt kümesi yok, kısmi bağımlılık olamaz: 2NF. Ama 'de B süper anahtar değil ve C asal değil: geçişli bağımlılık, 3NF bozuluyor. Cevap 2NF.
Let with . Is in BCNF? Is it in 3NF?
Cevabı göster
Anahtarlar: A sağda yok. {A,B}+ = ABC, {A,C}+ = ABC: anahtarlar AB, AC. : C süper anahtar değil, BCNF ihlali. 3NF için ikinci şans: B asal mı? B, AB anahtarında var, evet. Tüm FD'ler 3NF koşulunu sağlıyor: 3NF ama BCNF değil.
Let with . What is the highest normal form?
Cevabı göster
= ABCD, = ABCD. İki FD'nin de sol tarafı süper anahtar. BCNF koşulu her FD için sağlanıyor. Anahtarlar: A ve BC.
Let with . Find all candidate keys and the highest normal form.
Cevabı göster
A sağda yok, her anahtarda var. {A}+ = A. AB: hepsi. AC: C→D, D→B, sonra AB→CDE, hepsi. AD: D→B, AB→CDE, hepsi. AE: {A,E}, değil. Anahtarlar AB, AC, AD; asal öznitelikler A, B, C, D.: C süper anahtar değil, BCNF ihlali, ama D asal. : B asal. AB→CDE'de sol süper anahtar. Her FD 3NF'yi sağlıyor: 3NF, BCNF değil.
Let with . What is the highest normal form?
Cevabı göster
A, B sağda yok; {A,B}+ = ABCDE, tek anahtar AB. : anahtarın öz alt kümesi B, asal olmayan E'yi belirliyor. Kısmi bağımlılık: 2NF değil. ( ayrıca 3NF'yi de bozar, ama zaten 2NF yok.)
Let with . What is the highest normal form?
Cevabı göster
= ABCD ve = ABCD. İki FD'nin sol tarafı da süper anahtar. BCNF. İki aday anahtar var: AB, CD. Birden çok anahtar olması BCNF'yi bozmaz.
True or false: every relation schema with exactly two attributes is in BCNF.
Cevabı göster
R(A,B) için mümkün aşikar olmayan FD'ler ve . varsa {A}+ = AB, A süper anahtar. için de aynısı. Hiç FD yoksa anahtar AB. Her durumda sol taraf süper anahtar: BCNF.
Doğrulama: Tüm kanonik örtüler, gereksiz öznitelik testleri, aday anahtarlar ve normal form sonuçları verify/SEN2104/lib.mjs (canonicalCover, closure, equivalent, candidateKeys, highestNF; FD izdüşümü tüm alt kümeler üzerinden) ile hesaplandı (verify/SEN2104/10.mjs, 43 kontrol, 0 hata).