SEN2104 · 9. hafta · Relational Database Design

Kötü tasarım, fonksiyonel bağımlılıklar ve closure

Tek tabloya her şeyi koymanın neden anomali ürettiğini, fonksiyonel bağımlılığı, Armstrong aksiyomlarını ve closure ile anahtar bulmayı öğrenirsin. Normalizasyon sorularının hepsi bu hesaplara dayanır.

functional dependencyupdate anomalyinsertion anomalydeletion anomalytrivial dependencyArmstrong's axiomsattribute closuresuperkeycandidate keyclosure of F

Normalizasyon (normalization) bölümünün ilk haftası. Vizeden sonraki sınavda en garantili puanlar buradan gelir, çünkü soruların çoğu mekanik: closure hesapla, anahtar bul, FD türet. Bu sayfadaki üç beceri bir sonraki iki haftanın (normal formlar, ayrıştırma) temeli:

  1. Tek büyük tablonun neden sorun çıkardığını anomalilerle açıklamak.
  2. Bir fonksiyonel bağımlılığın (functional dependency) ne demek olduğunu ve örnek veride sağlanıp sağlanmadığını kontrol etmek.
  3. Attribute closure ile süper anahtar ve aday anahtar bulmak.

Kötü tasarım: her şey tek tabloda

Ders boyunca kullandığımız üniversite veritabanında takes, student, course ve department ayrı tablolar. Bunları tek bir “geniş” tabloda birleştirdiğini düşün:

CREATE TABLE wide AS
SELECT t.stu_id, s.name AS stu_name, t.course_id, c.title, c.credits,
       c.dept_name AS course_dept, d.building, t.grade
FROM takes t JOIN student s ON s.stu_id = t.stu_id
             JOIN course c ON c.course_id = t.course_id
             JOIN department d ON d.dept_name = c.dept_name;

Sonuç 14 satır (stu_name ve credits sütunlarını yer kazanmak için göstermiyorum):

stu_idcourse_idtitlecourse_deptbuildinggrade
S1CS101Intro to ProgrammingCSGalataA
S2CS101Intro to ProgrammingCSGalataB
S3CS101Intro to ProgrammingCSGalataNULL
S5CS101Intro to ProgrammingCSGalataF
S1CS201Data StructuresCSGalataB
S2CS201Data StructuresCSGalataC
S1CS305DatabasesCSGalataA
S4CS305DatabasesCSGalataB
S3EE210CircuitsEEGalataA
S1MA101CalculusMATHRumeliB
S3MA101CalculusMATHRumeliC
S4MA101CalculusMATHRumeliA
S4MA202Linear AlgebraMATHRumeliA
S7MA202Linear AlgebraMATHRumeliB

Sorgu yazmak kolaylaştı ama tablo üç tür hataya açık:

AnomaliBu tabloda nasıl olur
Güncelleme (update anomaly)CS bölümü başka binaya taşınırsa 8 satırı değiştirmen gerekir. Birini unutursan CS için iki farklı bina görünür, veri çelişkili olur.
Ekleme (insertion anomaly)BI100 (Biology) dersini, onu alan bir öğrenci yokken ekleyemezsin. Aynı şekilde hiç ders almamış S6 (Firat) tabloda yok.
Silme (deletion anomaly)EE210 sadece 1 satırda. S3 dersi bırakıp satır silinirse “EE210 = Circuits, 3 kredi” bilgisi de yok olur.

Kök neden: tablo birbirinden bağımsız gerçekleri (bir dersin adı, bir bölümün binası, bir öğrencinin notu) aynı satıra sıkıştırıyor. Bu gerçekleri biçimsel olarak ifade etmenin yolu fonksiyonel bağımlılık.

Fonksiyonel bağımlılık (functional dependency)

XX ve YY, RR şemasının öznitelik kümeleri olsun. X→YX \to Y şu demek: XX değerleri aynı olan her iki satırın YY değerleri de aynıdır. ”XX, YY‘yi belirler” diye okunur.

Geniş tablo için gerçek dünya kuralları:

  • stu_id→stu_name\text{stu\_id} \to \text{stu\_name}
  • course_id→title, credits, course_dept\text{course\_id} \to \text{title, credits, course\_dept}
  • course_dept→building\text{course\_dept} \to \text{building}
  • stu_id, course_id→grade\text{stu\_id, course\_id} \to \text{grade}

Bu FD’lerden {stu_id, course_id} tablonun tek aday anahtarı çıkıyor (aşağıda nasıl bulunacağını göreceksin).

Örnek veride kontrol etmek

Bir FD’nin ihlali için tek bir çift yeter: sol tarafı aynı, sağ tarafı farklı iki satır. SQL ile bunu gruplayarak bulursun:

-- building -> course_dept sağlanıyor mu?
SELECT building FROM wide
GROUP BY building
HAVING COUNT(DISTINCT course_dept) > 1;
Galata

Galata hem CS hem EE ile eşleşiyor: building→course_dept\text{building} \to \text{course\_dept} ihlal. Aynı sorguyu course_id/title ya da course_dept/building için çalıştırınca sonuç boş, yani bu FD’ler bu örnekte sağlanıyor. credits -> course_dept için sorgu 3 ve 4 değerlerini döndürür (4 kredilik dersler hem CS hem MATH).

TUZAK · örnek veri kanıt değildir. Sorgu boş döndüyse FD bu satırlarda ihlal edilmiyor demektir, şemada geçerli demek değildir. Yarın gelecek bir satır onu bozabilir. FD bir tasarım kararıdır (gerçek dünya kuralı); veri onu sadece çürütebilir.

Aşikar bağımlılık (trivial dependency)

Y⊆XY \subseteq X ise X→YX \to Y her ilişkide doğrudur: AB→AAB \to A, {stu_id, grade}→stu_id\{\text{stu\_id, grade}\} \to \text{stu\_id}. Bilgi taşımazlar. Sınavda “list the non-trivial FDs” denirse bunları yazma.

Armstrong aksiyomları

Verilen FD kümesi FF‘den başka FD’ler türetilebilir. Türetilebilen her şeyin kümesine FF‘nin kapanışı (closure of F) denir ve F+F^+ diye yazılır. Üç temel kural yeter (sound ve complete):

Kuralİfade
Yansıma (reflexivity)Y⊆XY \subseteq X ise X→YX \to Y
Genişletme (augmentation)X→YX \to Y ise XZ→YZXZ \to YZ
Geçişlilik (transitivity)X→YX \to Y ve Y→ZY \to Z ise X→ZX \to Z

Bunlardan türetilen pratik kurallar:

Kuralİfade
Birleşim (union)X→YX \to Y ve X→ZX \to Z ise X→YZX \to YZ
Ayrışım (decomposition)X→YZX \to YZ ise X→YX \to Y ve X→ZX \to Z
Sözde geçişlilik (pseudotransitivity)X→YX \to Y ve WY→ZWY \to Z ise WX→ZWX \to Z

Çözümlü örnek. F={A→B, B→C, CD→E}F = \{A \to B,\ B \to C,\ CD \to E\} verildiğinde AD→EAD \to E‘yi türet.

1. A -> B, B -> C           geçişlilik     A -> C
2. A -> C, D ekle           genişletme     AD -> CD
3. AD -> CD, CD -> E        geçişlilik     AD -> E

TUZAK · sol tarafı bölemezsin. Ayrışım kuralı sadece sağ taraf için geçerli. AB→CAB \to C‘den A→CA \to C çıkmaz. “Decomposition” görünce sağ tarafı böldüğünü hatırla.

F+F^+ genelde çok büyük olduğu için elle listelenmez. Pratikte asıl araç öznitelik kümesinin closure’ı.

Öznitelik closure’ı (attribute closure)

X+X^+: FF altında XX‘in belirlediği tüm özniteliklerin kümesi. Algoritma:

sonuç := X
tekrarla:
    F'deki her  L -> M  için:
        L ⊆ sonuç ise  sonuç := sonuç ∪ M
değişiklik olmayana kadar

Çözümlü örnek. R(A,B,C,D,E,G)R(A,B,C,D,E,G), F={A→B, AC→D, B→E, DE→G}F = \{A \to B,\ AC \to D,\ B \to E,\ DE \to G\}.

{A}+    : A
          A -> B     AB
          B -> E     ABE
          (AC -> D için C yok, DE -> G için D yok)  →  {A,B,E}

{A,C}+  : AC
          A -> B     ABC
          AC -> D    ABCD
          B -> E     ABCDE
          DE -> G    ABCDEG   →  tüm şema

Closure üç soruyu birden cevaplar:

  1. X→YX \to Y türetilebilir mi? Y⊆X+Y \subseteq X^+ ise evet. {A}+={A,B,E}\{A\}^+ = \{A,B,E\}, o yüzden A→DA \to D türetilemez ama A→EA \to E türetilebilir.
  2. XX süper anahtar (superkey) mı? X+=RX^+ = R ise evet. AC süper anahtar.
  3. XX aday anahtar (candidate key) mı? Süper anahtar ve hiçbir öz alt kümesi süper anahtar değilse evet. {A}+\{A\}^+ ve {C}+={C}\{C\}^+ = \{C\} şemayı vermiyor, AC aday anahtar.

Bütün aday anahtarları bulmak

Kaba kuvvet 2n2^n alt küme demek. Sınavda hızlı yol şu gözlem:

  • Hiçbir FD’nin sağında görünmeyen öznitelik başka hiçbir şeyden türetilemez, o yüzden her anahtarda olmak zorunda.
  • Sadece sağda görünen (hiç solda olmayan) öznitelik hiçbir minimal anahtarda olmaz.
  • Önce “zorunlu” kümenin closure’ını al. Yetmiyorsa ona sırayla birer öznitelik ekle, sonra ikişer. Bulduğun anahtarın üst kümelerini atla.

Çözümlü örnek. R(A,B,C,D,E)R(A,B,C,D,E), F={AB→C, C→D, D→E, E→A}F = \{AB \to C,\ C \to D,\ D \to E,\ E \to A\}.

Sağda hiç olmayan: B          → her anahtarda B var
{B}+ = {B}                     → yetmez
{A,B}+: AB -> C, C -> D, D -> E          = ABCDE   anahtar
{B,C}+: C -> D, D -> E, E -> A, AB -> C  = ABCDE   anahtar
{B,D}+: D -> E, E -> A, AB -> C          = ABCDE   anahtar
{B,E}+: E -> A, AB -> C, C -> D          = ABCDE   anahtar

Dört aday anahtar: AB, BC, BD, BE. Üçlü kümeleri denemene gerek yok, hepsi bunlardan birini içerir.

Döngü içeren bir örnek: R(A,B,C,D)R(A,B,C,D), F={A→B, B→C, C→A}F = \{A \to B,\ B \to C,\ C \to A\}. D hiçbir sağda yok, {D}+={D}\{D\}^+ = \{D\}. A, B ya da C’den herhangi biri döngüyü tamamlar: anahtarlar AD, BD, CD.

İPUCU · süper anahtar sayısı. Aday anahtar tekse ve kk öznitelikliyse, nn öznitelikli şemada süper anahtar sayısı 2n−k2^{n-k} olur (anahtar artı kalanların herhangi bir alt kümesi). R(A,B,C,D)R(A,B,C,D), anahtar A: 23=82^3 = 8 süper anahtar. Birden çok anahtar varsa kesişimleri çift saymamaya dikkat et.

Geniş tabloya dönersek, harflerle yaz: S = stu_id, N = stu_name, C = course_id, T = title, K = credits, D = course_dept, B = building, G = grade. F={S→N, C→TKD, D→B, SC→G}F = \{S \to N,\ C \to TKD,\ D \to B,\ SC \to G\}. S ve C sağda yok, {S,C}+\{S,C\}^+ her şeyi veriyor: tek aday anahtar {stu_id, course_id}. {C}+={C,T,K,D,B}\{C\}^+ = \{C,T,K,D,B\}: anahtarın sadece bir parçası bu kadar özniteliği belirliyor. Gelecek hafta bunun adını koyacağız: kısmi bağımlılık (partial dependency).

Sık yapılan hatalar

Yanlış düşünceDoğrusu
Örnek veride ihlal yoksa FD geçerlidirVeri sadece çürütür; FD bir tasarım kuralıdır
AB→CAB \to C ise A→CA \to CSol taraf bölünmez; sadece sağ taraf ayrışır
Closure’da FD’leri bir kez taramak yeterDeğişiklik bitene kadar baştan tara; yeni eklenen öznitelik eski bir FD’yi açabilir
Süper anahtar = aday anahtarAday anahtar minimal süper anahtardır
Tek bir aday anahtar vardırBirden çok olabilir (AB, BC, BD, BE)
Sağda hiç olmayan özniteliği atlamakO öznitelik her anahtarda bulunmak zorunda
COUNT(DISTINCT y) NULL’ı da sayarNULL’ları saymaz; NULL içeren sağ tarafı ayrıca kontrol et

Kendini test et

Sınavdaki gibi İngilizce sorular. Önce kâğıt kalemle çöz, sonra cevabı aç.

Soru 1kolay

In the wide table wide(stu_id, stu_name, course_id, title, credits, course_dept, building, grade), student S3 drops EE210 and we delete that row. Afterwards the database no longer knows that EE210 is called *Circuits* and has 3 credits. Which anomaly is this?

Cevabı göster
Deletion anomaly

EE210 geniş tabloda yalnızca 1 satırda geçiyor (sadece S3 almış). Kayıt silinince dersin kendisine ait bilgi (title, credits) de gidiyor. İstemediğin bir bilginin silmeyle birlikte kaybolması silme anomalisi (deletion anomaly).

Soru 2kolay

Is the functional dependency AB→AAB \to A trivial? Explain in one sentence.

Cevabı göster
Yes

X→YX \to Y aşikardır (trivial) eğer Y⊆XY \subseteq X ise. Burada {A}⊆{A,B}\{A\} \subseteq \{A,B\}, yani her ilişkide her zaman sağlanır. Bilgi taşımaz.

Soru 3kolay

The department table contains (CS, Galata, 500000), (EE, Galata, 350000), (MATH, Rumeli, 200000), (BIO, Kadikoy, 150000). Does the FD building -> dept_name hold on this instance?

Cevabı göster
No (Galata maps to both CS and EE)

FD ihlali için aynı sol taraf değerine sahip, sağ tarafı farklı iki satır yeter. Galata hem CS hem EE ile eşleşiyor. Tersine dept_name -> building bu örnekte sağlanıyor ama bir örnekten FD'nin şemada geçerli olduğu kanıtlanamaz, sadece çürütülebilir.

Soru 4orta

Write an SQL query that returns every course_id that violates the FD course_id -> title in table wide. (An empty result means the FD holds on this instance.)

Cevabı göster
SELECT course_id FROM wide GROUP BY course_id HAVING COUNT(DISTINCT title) > 1;

Sol tarafa göre grupla, her grupta sağ tarafın kaç farklı değeri olduğunu say. 1'den fazlaysa ihlal var. Örnek veride sonuç boş döner. Dikkat: COUNT(DISTINCT ...) NULL'ları saymaz, sağ tarafta NULL olabilecekse ayrıca kontrol et.

Soru 5orta

Let R(A,B,C,D,E,G)R(A,B,C,D,E,G) with F={A→B, AC→D, B→E, DE→G}F = \{A \to B,\ AC \to D,\ B \to E,\ DE \to G\}. Compute {A}+\{A\}^+.

Cevabı göster
{A, B, E}

Başla: {A}. A→BA \to B: {A,B}. B→EB \to E: {A,B,E}. AC→DAC \to D için C lazım, yok. DE→GDE \to G için D lazım, yok. Değişiklik bitti: {A}+={A,B,E}\{A\}^+ = \{A,B,E\}.

Soru 6orta

Same RR and FF as above. Is ACAC a superkey of RR? Is it a candidate key?

Cevabı göster
Yes, and it is the only candidate key

{A,C}+\{A,C\}^+: A→BA \to B ile {A,B,C}, AC→DAC \to D ile {A,B,C,D}, B→EB \to E ile {A,B,C,D,E}, DE→GDE \to G ile hepsi. Süper anahtar. A ve C hiçbir FD'nin sağında yok, yani her anahtarda olmak zorundalar. {A}+\{A\}^+ ve {C}+\{C\}^+ tüm şemayı vermiyor, o yüzden AC minimal ve tek aday anahtar.

Soru 7orta

Let R(A,B,C,D,E)R(A,B,C,D,E) with F={A→C, B→D, CD→E, E→A}F = \{A \to C,\ B \to D,\ CD \to E,\ E \to A\}. Is BDBD a superkey?

Cevabı göster
No, {B,D}+ = {B,D}

{B,D} ile başla. B→DB \to D yeni bir şey eklemiyor. A→CA \to C için A, CD→ECD \to E için C, E→AE \to A için E lazım. Hiçbiri yok. Closure {B,D}'de kalıyor, şemanın tamamı değil.

Soru 8zor

Same RR and FF as the previous question. Find all candidate keys.

Cevabı göster
AB, BC, BE

B hiçbir sağ tarafta yok, yani her anahtarda var. {B}+ = {B,D}, yetmez. B'ye tek öznitelik ekle:
AB: A→CA \to C, B→DB \to D, CD→ECD \to E ile hepsi. Anahtar.
BC: B→DB \to D, CD→ECD \to E, E→AE \to A ile hepsi. Anahtar.
BE: E→AE \to A, A→CA \to C, B→DB \to D ile hepsi. Anahtar.
BD: {B,D}, değil. AB, BC, BE'nin üst kümeleri minimal olmaz; BD'yi içeren 3'lüleri dene: ABD, BCD, BDE zaten bir anahtar içeriyor. Sonuç: AB, BC, BE.

Soru 9orta

Let R(A,B,C,D,E,G)R(A,B,C,D,E,G) with F={A→B, AC→D, B→E, DE→G}F = \{A \to B,\ AC \to D,\ B \to E,\ DE \to G\}. Does FF imply A→DA \to D?

Cevabı göster
No

X→YX \to Y türetilebilir mi sorusunun cevabı: Y⊆X+Y \subseteq X^+ mı? {A}+={A,B,E}\{A\}^+ = \{A,B,E\}, D içinde yok. Yani A→DA \to D F'den çıkmaz. (Ama AC→GAC \to G çıkar, çünkü {A,C}+\{A,C\}^+ her şeyi içerir.)

Soru 10zor

Given F={A→B, B→C, CD→E}F = \{A \to B,\ B \to C,\ CD \to E\}, derive AD→EAD \to E using Armstrong's axioms. Name each rule.

Cevabı göster
A->B, B->C ⇒ A->C (transitivity); augment with D: AD->CD (augmentation); AD->CD, CD->E ⇒ AD->E (transitivity)

1) A→BA \to B ve B→CB \to C, geçişlilik (transitivity): A→CA \to C.
2) Her iki tarafa D ekle, genişletme (augmentation): AD→CDAD \to CD.
3) AD→CDAD \to CD ve CD→ECD \to E, geçişlilik: AD→EAD \to E.
Kontrol: {A,D}+={A,B,C,D,E}\{A,D\}^+ = \{A,B,C,D,E\}, E içinde var.

Soru 11zor

Let R(A,B,C,D)R(A,B,C,D) with F={A→B, B→A}F = \{A \to B,\ B \to A\}. List all candidate keys and give the number of superkeys.

Cevabı göster
ACD, BCD; 3 superkeys

C ve D hiçbir sağ tarafta yok: her anahtarda varlar. {C,D}+ = {C,D}. A ekle: {A,C,D}+ = hepsi. B ekle: {B,C,D}+ = hepsi. İkisi de minimal. Süper anahtarlar CD'yi ve A ya da B'den en az birini içeren kümeler: ACD, BCD, ABCD. Toplam 3.

Soru 12kolay

The instructor table has (I1, Aksoy, CS, 95000) and (I2, Demir, CS, 80000). A student claims dept_name -> salary because 'every department has a fixed salary scale'. Does the instance support this FD?

Cevabı göster
No, CS has two salaries (95000 and 80000)

Aynı dept_name (CS) için iki farklı salary var, FD bu örnekte ihlal ediliyor. Bir FD'yi geçerli kılan gerçek dünya kuralıdır; örnek veri onu ancak çürütebilir. Burada çürütülmüş. MATH de iki farklı maaşla ihlal ediyor.

Doğrulama: Geniş tablo ve FD ihlal kontrolleri node:sqlite ile örnek veritabanında çalıştırıldı; tüm closure, anahtar ve türetme cevapları verify/SEN2104/lib.mjs fonksiyonlarıyla hesaplandı (verify/SEN2104/09.mjs, 39 kontrol, 0 hata).

Deftere not kartı

Anomaliler: update (aynı bilgi çok satırda), insert (ders öğrencisiz eklenemez), delete (son kayıtla bilgi gider) X -> Y: X'te eşit iki satır Y'de de eşit olmalı Örnek veri FD'yi sadece ÇÜRÜTÜR, kanıtlamaz SQL kontrol: GROUP BY X HAVING COUNT(DISTINCT Y) > 1 (boş = ihlal yok) Trivial: Y ⊆ X (AB -> A) Armstrong: reflexivity, augmentation (XZ -> YZ), transitivity Türetilen: union, decomposition, pseudotransitivity (X->Y, WY->Z => WX->Z) X+ algoritması: X ile başla, sol tarafı içerdiğin her FD'nin sağını ekle, değişmeyene dek X -> Y çıkar mı? Y ⊆ X+ ? X süper anahtar <=> X+ = R Aday anahtar = minimal süper anahtar Hiç sağda olmayan öznitelik HER anahtarda; önce onların closure'ını al, sonra birer birer ekle