SEN2104 · 10. hafta · Relational Database Design

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.

canonical coverextraneous attributefirst normal form (1NF)atomic domainsecond normal form (2NF)partial dependencythird normal form (3NF)transitive dependencyprime attributeBoyce-Codd normal form (BCNF)

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ı:

  1. Tüm aday anahtarları bul.
  2. Asal (prime) öznitelikleri yaz: en az bir aday anahtarda geçenler.
  3. 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ü FcF_c, FF ile eşdeğer (aynı F+F^+) ama gereksiz hiçbir şey içermeyen kümedir:

  • Hiçbir FD’de gereksiz öznitelik (extraneous attribute) yok.
  • Her sol taraf tektir (A→BA \to B ve A→CA \to C yerine A→BCA \to BC).

Gereksiz öznitelik testi

NeredeSoruTest
Sol taraf: AB→CAB \to C‘de BA tek başına C’yi belirler mi?{A}+\{A\}^+‘yı orijinal F altında hesapla, C içinde mi?
Sağ taraf: A→BCA \to BC‘de CC’yi bu FD olmadan da türetebilir miyim?FD’yi A→BA \to B yap, yeni küme altında {A}+\{A\}^+ 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

F={A→BD, AB→C, C→D, B→D}F = \{A \to BD,\ AB \to C,\ C \to D,\ B \to D\}

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: FcF_c ile FF eşdeğer mi? FF‘deki her FD FcF_c‘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 FcF_c 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_idnamephones
S1Ada0532 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 {stu_id, course_id}→grade\{\text{stu\_id, course\_id}\} \to \text{grade}, stu_id→stu_name\text{stu\_id} \to \text{stu\_name}, course_id→title\text{course\_id} \to \text{title}.

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: R(A,B,C,D)R(A,B,C,D), F={AB→C, B→D}F = \{AB \to C,\ B \to D\}. Anahtar AB, B→DB \to D 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 X→AX \to A için şunlardan en az biri doğru olmalı:

  1. XX bir süper anahtar, ya da
  2. AA 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 stu_id→name, dept_name\text{stu\_id} \to \text{name, dept\_name}, dept_name→building\text{dept\_name} \to \text{building}. Anahtar stu_id (tek öznitelik, 2NF otomatik). dept_name→building\text{dept\_name} \to \text{building}: dept_name süper anahtar değil, building asal değil. 3NF bozuluyor: en yüksek 2NF.

Harfli örnek: R(A,B,C,D)R(A,B,C,D), F={A→B, B→C, A→D}F = \{A \to B,\ B \to C,\ A \to D\}: anahtar A, B→CB \to C geçişli, 2NF.

Boyce-Codd normal form (BCNF)

Her aşikar olmayan X→YX \to Y için XX 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.

tutor_id→subject{stu_id, subject}→tutor_id\text{tutor\_id} \to \text{subject} \qquad \{\text{stu\_id, subject}\} \to \text{tutor\_id}

Anahtarlar: {stu_id, subject} ve {stu_id, tutor_id}. Üç öznitelik de asal. tutor_id→subject\text{tutor\_id} \to \text{subject}: tutor_id süper anahtar değil, BCNF ihlali. Ama subject asal, 3NF sağlanıyor. En yüksek 3NF.

Harfli karşılığı: R(A,B,C)R(A,B,C), F={AB→C, C→B}F = \{AB \to C,\ C \to B\}, anahtarlar AB ve AC, sonuç 3NF.

Hepsi bir arada: çözümlü tespit

R(A,B,C,D,E)R(A,B,C,D,E), F={AB→CDE, C→D, D→B}F = \{AB \to CDE,\ C \to D,\ D \to B\}.

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: R(A,B,C,D)R(A,B,C,D), F={A→BCD, BC→A}F = \{A \to BCD,\ BC \to A\}. {A}+\{A\}^+ ve {B,C}+\{B,C\}^+ 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 F+F^+‘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

FormKoşulBozan şey
1NFAtomik değerlerListe, tekrar eden grup
2NF1NF + kısmi bağımlılık yokAnahtarın parçası → asal olmayan
3NFHer X→AX \to A: X süper anahtar ya da A asalAnahtar olmayan → asal olmayan
BCNFHer X→YX \to Y: X süper anahtarSüper anahtar olmayan → herhangi bir şey

Sık yapılan hatalar

Yanlış düşünceDoğrusu
Normal formu bulmadan önce anahtarlara bakmamakÖnce tüm aday anahtarlar ve asal öznitelikler
“A asal” = A birincil anahtardaHerhangi bir aday anahtarda geçmesi yeter
3NF ve BCNF aynı şey3NF’de sağ taraf asalsa izin var; BCNF’de yok
Birden çok aday anahtar BCNF’yi bozarAB ve CD iki anahtar olabilir, şema yine BCNF
Sol taraf gereksiz testini değiştirilmiş F ile yapmakOrijinal F altında X+X^+ al
Kanonik örtü tektirSıraya göre farklı ama eşdeğer sonuçlar çıkabilir
2NF bozuksa 3NF olabilirFormlar 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ç.

Soru 1kolay

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; move phones to a separate table student_phone(stu_id, phone)

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).

Soru 2orta

Let F={AB→C, A→B}F = \{AB \to C,\ A \to B\}. Is BB extraneous in AB→CAB \to C? Give the canonical cover.

Cevabı göster
Yes; Fc = {A -> BC}

Sol taraftaki B'nin gereksiz olup olmadığını test etmek için B'yi at ve {A}+\{A\}^+'yı orijinal F altında hesapla: A→BA \to B ile {A,B}, AB→CAB \to C ile {A,B,C}. C içinde, B gereksiz. FD A→CA \to C olur. Aynı sol tarafları birleştir: A→BCA \to BC.

Soru 3orta

Let F={A→BC, B→C}F = \{A \to BC,\ B \to C\}. Which attribute is extraneous, and what is the canonical cover?

Cevabı göster
C in A -> BC; Fc = {A -> B, B -> C}

Sağ taraftaki C'yi test et: A→BCA \to BC yerine A→BA \to B koy, yeni küme {A→B, B→C}\{A \to B,\ B \to C\} altında {A}+={A,B,C}\{A\}^+ = \{A,B,C\}. C hâlâ çıkıyor, yani gereksiz. Kanonik örtü: A→BA \to B, B→CB \to C.

Soru 4zor

Find a canonical cover of F={A→C, AC→D, E→AD, E→H}F = \{A \to C,\ AC \to D,\ E \to AD,\ E \to H\}.

Cevabı göster
{A -> CD, E -> AH}

1) Sağları böl: A→C, AC→D, E→A, E→D, E→H.
2) AC→D'de C gereksiz mi? {A}+\{A\}^+ = {A,C,D} (A→C sonra AC→D). Evet: A→D.
3) Gereksiz FD: E→D atılınca {E}+\{E\}^+ = 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.

Soru 5orta

Let R(A,B,C,D)R(A,B,C,D) with F={AB→C, B→D}F = \{AB \to C,\ B \to D\}. What is the highest normal form of RR?

Cevabı göster
1NF

A ve B sağda yok, {A,B}+\{A,B\}^+ = ABCD: tek anahtar AB. Asal öznitelikler A, B. B→DB \to D: 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.

Soru 6orta

Let R(A,B,C,D,E)R(A,B,C,D,E) with F={A→B, B→C, C→D, D→E}F = \{A \to B,\ B \to C,\ C \to D,\ D \to E\}. What is the highest normal form?

Cevabı göster
2NF

Anahtar tek öznitelik: A ({A}+\{A\}^+ = ABCDE). Tek öznitelikli anahtarın öz alt kümesi yok, kısmi bağımlılık olamaz: 2NF. Ama B→CB \to C'de B süper anahtar değil ve C asal değil: geçişli bağımlılık, 3NF bozuluyor. Cevap 2NF.

Soru 7orta

Let R(A,B,C)R(A,B,C) with F={AB→C, C→B}F = \{AB \to C,\ C \to B\}. Is RR in BCNF? Is it in 3NF?

Cevabı göster
Not BCNF; 3NF

Anahtarlar: A sağda yok. {A,B}+ = ABC, {A,C}+ = ABC: anahtarlar AB, AC. C→BC \to B: 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.

Soru 8kolay

Let R(A,B,C,D)R(A,B,C,D) with F={A→BCD, BC→A}F = \{A \to BCD,\ BC \to A\}. What is the highest normal form?

Cevabı göster
BCNF

{A}+\{A\}^+ = ABCD, {B,C}+\{B,C\}^+ = ABCD. İki FD'nin de sol tarafı süper anahtar. BCNF koşulu her FD için sağlanıyor. Anahtarlar: A ve BC.

Soru 9zor

Let R(A,B,C,D,E)R(A,B,C,D,E) with F={AB→CDE, C→D, D→B}F = \{AB \to CDE,\ C \to D,\ D \to B\}. Find all candidate keys and the highest normal form.

Cevabı göster
Keys AB, AC, AD; 3NF

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→DC \to D: C süper anahtar değil, BCNF ihlali, ama D asal. D→BD \to B: B asal. AB→CDE'de sol süper anahtar. Her FD 3NF'yi sağlıyor: 3NF, BCNF değil.

Soru 10orta

Let R(A,B,C,D,E)R(A,B,C,D,E) with F={AB→C, C→D, B→E}F = \{AB \to C,\ C \to D,\ B \to E\}. What is the highest normal form?

Cevabı göster
1NF

A, B sağda yok; {A,B}+ = ABCDE, tek anahtar AB. B→EB \to E: anahtarın öz alt kümesi B, asal olmayan E'yi belirliyor. Kısmi bağımlılık: 2NF değil. (C→DC \to D ayrıca 3NF'yi de bozar, ama zaten 2NF yok.)

Soru 11kolay

Let R(A,B,C,D)R(A,B,C,D) with F={AB→CD, CD→AB}F = \{AB \to CD,\ CD \to AB\}. What is the highest normal form?

Cevabı göster
BCNF

{A,B}+\{A,B\}^+ = ABCD ve {C,D}+\{C,D\}^+ = ABCD. İki FD'nin sol tarafı da süper anahtar. BCNF. İki aday anahtar var: AB, CD. Birden çok anahtar olması BCNF'yi bozmaz.

Soru 12kolay

True or false: every relation schema with exactly two attributes is in BCNF.

Cevabı göster
True

R(A,B) için mümkün aşikar olmayan FD'ler A→BA \to B ve B→AB \to A. A→BA \to B varsa {A}+ = AB, A süper anahtar. B→AB \to A 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).

Deftere not kartı

Kanonik örtü: 1) sağları böl 2) soldaki gereksizleri at 3) gereksiz FD'leri at 4) aynı solları birleştir Soldaki B gereksiz mi (AB->C): {A}+ ORİJİNAL F altında C içeriyor mu? Sağdaki C gereksiz mi (A->BC): A->B ile değiştirilmiş F altında {A}+ C içeriyor mu? Kanonik örtü tek değil; sıra sonucu değiştirebilir 1NF: atomik değerler (liste, tekrar eden grup yok) 2NF: 1NF + asal olmayan öznitelik anahtarın PARÇASINA bağlı değil 3NF: her X->A için X süper anahtar YA DA A asal BCNF: her X->A için X süper anahtar Asal (prime) öznitelik = herhangi bir aday anahtarda geçen Tek öznitelikli anahtar → otomatik 2NF İki öznitelikli şema → her zaman BCNF Sıra: anahtarları bul → asal öznitelikleri yaz → her FD'yi BCNF, 3NF, 2NF testinden geçir