• Mindscape πŸ”₯
    • Playlist 🎧
  • πŸ€– Artifical Intelligence

    • 1. Basics; Linear Algebra
    • 2. Basics; Linear Algebra (2), Search (1)
    • 3. Search (2)
    • 4. Knowledge and Logic (1)
    • 5. Knowledge and Logic (2)
    • 6. Probability
    • 7. Information Theory
    • 8. Probabilitc Reasoning (2)
    • 9. Probabilitc Reasoning (3)
    • 10. Machine Learning (1)
    • 11. Machine Learning (2)
    • 12. Machine Learning (3)
    • 13. Linear Models
    • 14. Other Classic ML Models (1)
    • 15. Other Classic ML Models (2)
  • πŸ”’ Computer Security

    • 01. Overview
    • 02. μ •λ³΄λ³΄μ•ˆμ •μ±… 및 λ²•κ·œ
    • 03. Cryptographic Tools
    • 04. User Authentication
    • 05. Access Control
    • 06. Database Security
    • 07. Malicious Software
    • 08. Firmware Analysis
  • πŸ—„οΈ Database System

    • 1. Introduction
    • 2. Relational Model
    • 3. SQL
    • 6. E-R Model
    • 7. Relational Database Design (1)
    • 7. Relational Database Design (2)
    • 13. Data Storage Structures
    • 14. Indexing
    • 15. Query Processing
  • πŸ“ Software Engineering

    • 2. Introduction to Software Engineering
    • 3. Process
    • 4. Process Models
    • 5. Agile
    • 6. Requirements
    • 7. Requirements Elicitation and Documentation
    • 8. Architecture
    • 9. Unified Modelling Language
    • 10. Object-Oriented Analysis
    • Object-Oriented Design
  • 🧠 Algorithm

    • Python μ‹œκ°„ 초과 λ°©μ§€λ₯Ό μœ„ν•œ 팁
    • C++ std::vector μ‚¬μš©λ²• 정리
    • Vim μ‚¬μš© 맀뉴얼
    • 1018번: 체슀판 λ‹€μ‹œ μΉ ν•˜κΈ°
    • 1966번: ν”„λ¦°ν„° 큐

7. Relational Database Design (2)

Functional Dependency Theory

Functional-Dependency Theory Roadmap

  • μ£Όμ–΄μ§„ ν•¨μˆ˜ 쒅속성(Functional dependency) 집합에 μ˜ν•΄ λ…Όλ¦¬μ μœΌλ‘œ ν•¨μΆ•λ˜λŠ” ν•¨μˆ˜ 쒅속성을 μ•Œλ €μ£ΌλŠ” ν˜•μ‹ 이둠(formal theory)을 κ³ λ €
  • BCNF와 3NF둜의 무손싀 λΆ„ν•΄(lossless decomposition)λ₯Ό μƒμ„±ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜ 개발
  • λΆ„ν•΄κ°€ 쒅속성 보쑴(dependency-preserving)인지 ν…ŒμŠ€νŠΈν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜ 개발

Closure of a Set of Functional Dependencies

  • Armstrong's Axioms(μ•”μŠ€νŠΈλ‘± 곡리)λ₯Ό 반볡적으둜 μ μš©ν•˜μ—¬ F+(폐포) 계산 κ°€λŠ₯:
    • Reflexivity rule(λ°˜μ‚¬ κ·œμΉ™): Ξ²βŠ†Ξ±\beta \subseteq \alphaΞ²βŠ†Ξ±μ΄λ©΄ Ξ±β†’Ξ²\alpha \rightarrow \betaΞ±β†’Ξ²
    • Augmentation rule(증가 κ·œμΉ™): Ξ±β†’Ξ²\alpha \rightarrow \betaα→β이면 Ξ³Ξ±β†’Ξ³Ξ²\gamma\alpha \rightarrow \gamma\betaΞ³Ξ±β†’Ξ³Ξ²
    • Transitivity rule(이행 κ·œμΉ™): Ξ±β†’Ξ²\alpha \rightarrow \betaα→β이고 Ξ²β†’Ξ³\beta \rightarrow \gammaβ→γ이면 Ξ±β†’Ξ³\alpha \rightarrow \gammaΞ±β†’Ξ³
  • μ΄λŸ¬ν•œ κ·œμΉ™λ“€μ€
    • Sound(건전함): μ‹€μ œλ‘œ μ„±λ¦½ν•˜λŠ” ν•¨μˆ˜ μ’…μ†μ„±λ§Œ 생성
    • Complete(완전함): μ„±λ¦½ν•˜λŠ” λͺ¨λ“  ν•¨μˆ˜ 쒅속성을 생성
  • μΆ”κ°€ κ·œμΉ™:
    • Union rule(ν•©μ§‘ν•© κ·œμΉ™): Ξ±β†’Ξ²\alpha \rightarrow \betaα→β이고 Ξ±β†’Ξ³\alpha \rightarrow \gammaα→γ이면 Ξ±β†’Ξ²Ξ³\alpha \rightarrow \beta\gammaΞ±β†’Ξ²Ξ³
    • Decomposition rule(λΆ„ν•΄ κ·œμΉ™): Ξ±β†’Ξ²Ξ³\alpha \rightarrow \beta\gammaα→βγ이면 Ξ±β†’Ξ²\alpha \rightarrow \betaα→β이고 Ξ±β†’Ξ³\alpha \rightarrow \gammaΞ±β†’Ξ³
    • Pseudotransitivity rule(μ˜μ‚¬ 이행 κ·œμΉ™): Ξ±β†’Ξ²\alpha \rightarrow \betaα→β이고 Ξ³Ξ²β†’Ξ΄\gamma\beta \rightarrow \deltaγβ→δ이면 Ξ±Ξ³β†’Ξ΄\alpha\gamma \rightarrow \deltaΞ±Ξ³β†’Ξ΄
  • μœ„μ˜ κ·œμΉ™λ“€μ€ μ•”μŠ€νŠΈλ‘± κ³΅λ¦¬λ‘œλΆ€ν„° μœ μΆ” κ°€λŠ₯

Example of F+

  • R=(A,B,C,G,H,I)R = (A, B, C, G, H, I)R=(A,B,C,G,H,I), F={Aβ†’B,Aβ†’C,CGβ†’H,CGβ†’I,Bβ†’H}F = \{ A \rightarrow B, A \rightarrow C, CG \rightarrow H, CG \rightarrow I, B \rightarrow H \}F={Aβ†’B,Aβ†’C,CGβ†’H,CGβ†’I,Bβ†’H}
  • F+F^+F+의 일뢀 멀버
    • Aβ†’HA \rightarrow HAβ†’H
      • Aβ†’BA \rightarrow BAβ†’B와 Bβ†’HB \rightarrow HBβ†’Hλ‘œλΆ€ν„° 이행 κ·œμΉ™μ— μ˜ν•΄
    • AGβ†’IAG \rightarrow IAGβ†’I
      • Aβ†’CA \rightarrow CAβ†’Cλ₯Ό GGG둜 μ¦κ°€μ‹œμΌœ AGβ†’CGAG \rightarrow CGAGβ†’CGλ₯Ό μ–»μŒ
      • 그리고 CGβ†’ICG \rightarrow ICGβ†’Iμ™€μ˜ 이행 κ·œμΉ™μ— μ˜ν•΄ AGβ†’IAG \rightarrow IAGβ†’Iλ₯Ό μ–»μŒ
    • CGβ†’HICG \rightarrow HICGβ†’HI
      • CGβ†’ICG \rightarrow ICGβ†’Iλ₯Ό CGCGCG둜 μ¦κ°€μ‹œμΌœ CGβ†’CGICG \rightarrow CGICGβ†’CGIλ₯Ό μ–»μŒ
      • CGβ†’HCG \rightarrow HCGβ†’Hλ₯Ό III둜 μ¦κ°€μ‹œμΌœ CGIβ†’HICGI \rightarrow HICGIβ†’HIλ₯Ό μ–»μŒ
      • 그리고 이행 κ·œμΉ™μ— μ˜ν•΄ CGβ†’HICG \rightarrow HICGβ†’HIλ₯Ό μ–»μŒ

(Optional) Procedure for Computing F+

  • ν•¨μˆ˜ 쒅속성 μ§‘ν•© F의 폐포λ₯Ό κ³„μ‚°ν•˜λŠ” 절차:
    F+ = F
    repeat
        for each functional dependency f in F+
            apply reflexivity and augmentation rules on f
            add the resulting functional dependencies to F+
        for each pair of functional dependencies f1 and f2 in F+
            if f1 and f2 can be combined using transitivity
            then add the resulting functional dependency to F+
    until F+ does not change any further
    
  • μ°Έκ³ : 이 μž‘μ—…μ„ μœ„ν•œ λŒ€μ•ˆμ  μ ˆμ°¨λŠ” λ‚˜μ€‘μ— μ‚΄νŽ΄λ³Ό κ²ƒμž„

Closure of Attribute Sets

  • 속성 BλŠ” Ξ±β†’B\alpha \rightarrow BΞ±β†’B일 λ•Œ Ξ±\alphaα에 μ˜ν•΄ ν•¨μˆ˜μ μœΌλ‘œ κ²°μ •λœλ‹€κ³  함
  • 속성 μ§‘ν•© Ξ±\alphaΞ±κ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, FFF ν•˜μ—μ„œ Ξ±\alphaα의 Closure(폐포)(Ξ±+\alpha^+Ξ±+둜 ν‘œκΈ°)λŠ” FFF ν•˜μ—μ„œ Ξ±\alphaα에 μ˜ν•΄ ν•¨μˆ˜μ μœΌλ‘œ κ²°μ •λ˜λŠ” μ†μ„±λ“€μ˜ μ§‘ν•©μœΌλ‘œ μ •μ˜λ¨
    • Ξ±β†’Ξ²\alpha \rightarrow \betaΞ±β†’Ξ²κ°€ F+F^+F+에 있음 β€…β€ŠβŸΊβ€…β€ŠΞ²βŠ†Ξ±+\iff \beta \subseteq \alpha^+βŸΊΞ²βŠ†Ξ±+
  • FFF ν•˜μ—μ„œ Ξ±\alphaα의 폐포 Ξ±+\alpha^+Ξ±+λ₯Ό κ³„μ‚°ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜
    result := Ξ±;
    while(changes to result) do
        for each Ξ²β†’Ξ³ in F do
            begin
                if Ξ² βŠ† result then result := result βˆͺ Ξ³
            end
    

Example of Attribute Set Closure

  • R=(A,B,C,G,H,I)R = (A, B, C, G, H, I)R=(A,B,C,G,H,I)
  • F={Aβ†’B,Aβ†’C,CGβ†’H,CGβ†’I,Bβ†’H}F = \{A \rightarrow B, A \rightarrow C, CG \rightarrow H, CG \rightarrow I, B \rightarrow H\}F={Aβ†’B,Aβ†’C,CGβ†’H,CGβ†’I,Bβ†’H}
  • (AG)+(AG)^+(AG)+
    1. result = AG
    2. result = ABCG (Aβ†’BA \rightarrow BAβ†’B 와 Aβ†’CA \rightarrow CAβ†’C)
    3. result = ABCGH (CG→HCG \rightarrow HCG→H)
    4. result = ABCGHI (CG→ICG \rightarrow ICG→I)
  • AGλŠ” 후보 ν‚€(candidate key)인가?
    1. AGλŠ” μŠˆνΌν‚€(superkey)인가?
      • AGβ†’RAG \rightarrow RAGβ†’R인가? β€…β€ŠβŸΊβ€…β€ŠR=(AG)+\iff R = (AG)^+⟺R=(AG)+인가?
    2. AG의 μž„μ˜μ˜ 뢀뢄집합이 μŠˆνΌν‚€μΈκ°€?
      • Aβ†’RA \rightarrow RAβ†’R인가? β€…β€ŠβŸΊβ€…β€ŠR=(A)+\iff R = (A)^+⟺R=(A)+인가?
      • Gβ†’RG \rightarrow RGβ†’R인가? β€…β€ŠβŸΊβ€…β€ŠR=(G)+\iff R = (G)^+⟺R=(G)+인가?
    • 일반적으둜: 크기 n-1의 각 뢀뢄집합에 λŒ€ν•΄ 확인

Uses of Attribute Closure

  • 속성 폐포 μ•Œκ³ λ¦¬μ¦˜μ˜ μ—¬λŸ¬ μš©λ„:
    • μŠˆνΌν‚€ ν…ŒμŠ€νŠΈ:
      • Ξ±\alphaΞ±κ°€ μŠˆνΌν‚€μΈμ§€ ν…ŒμŠ€νŠΈν•˜κΈ° μœ„ν•΄, Ξ±+\alpha^+Ξ±+λ₯Ό κ³„μ‚°ν•˜κ³  Ξ±+\alpha^+Ξ±+κ°€ RRR의 λͺ¨λ“  속성을 ν¬ν•¨ν•˜λŠ”μ§€ 확인
    • ν•¨μˆ˜ 쒅속성 ν…ŒμŠ€νŠΈ:
      • ν•¨μˆ˜ 쒅속성 Ξ±β†’Ξ²\alpha \rightarrow \betaΞ±β†’Ξ²κ°€ μ„±λ¦½ν•˜λŠ”μ§€(즉, F+F^+F+에 μžˆλŠ”μ§€) ν™•μΈν•˜λ €λ©΄, Ξ²βŠ†Ξ±+\beta \subseteq \alpha^+Ξ²βŠ†Ξ±+인지 ν™•μΈν•˜λ©΄ 됨
      • κ°„λ‹¨ν•˜κ³  μ €λ ΄ν•œ ν…ŒμŠ€νŠΈμ΄λ©° 맀우 μœ μš©ν•¨
    • F의 폐포 계산:
      • 각 Ξ³βŠ†R\gamma \subseteq RΞ³βŠ†R에 λŒ€ν•΄, 폐포 Ξ³+\gamma^+Ξ³+λ₯Ό μ°Ύκ³ , 각 SβŠ†Ξ³+S \subseteq \gamma^+SβŠ†Ξ³+에 λŒ€ν•΄ ν•¨μˆ˜ 쒅속성 Ξ³β†’S\gamma \rightarrow SΞ³β†’Sλ₯Ό 좜λ ₯

Canonical Cover

  • ν•¨μˆ˜ 쒅속성 μ§‘ν•© Fλ₯Ό κ°–λŠ” 관계 μŠ€ν‚€λ§ˆ κ°€μ •
  • μ‚¬μš©μžκ°€ 관계에 λŒ€ν•œ μ—…λ°μ΄νŠΈλ₯Ό μˆ˜ν–‰ν•  λ•Œλ§ˆλ‹€,
    • λ°μ΄ν„°λ² μ΄μŠ€ μ‹œμŠ€ν…œμ€ μ—…λ°μ΄νŠΈκ°€ μ–΄λ–€ FD도 μœ„λ°˜ν•˜μ§€ μ•ŠμŒμ„ 보μž₯ν•΄μ•Ό 함
    • 즉, μƒˆλ‘œμš΄ λ°μ΄ν„°λ² μ΄μŠ€ μƒνƒœμ—μ„œ F에 μžˆλŠ” λͺ¨λ“  FDκ°€ λ§Œμ‘±λ˜μ–΄μ•Ό 함
  • μ—…λ°μ΄νŠΈκ°€ μ§‘ν•© F의 μ–΄λ–€ FDλ₯Ό μœ„λ°˜ν•˜λ©΄, μ‹œμŠ€ν…œμ€ μ—…λ°μ΄νŠΈλ₯Ό λ‘€λ°±(roll back)ν•΄μ•Ό 함
  • μœ„λ°˜ μ—¬λΆ€λ₯Ό ν™•μΈν•˜λŠ” 데 λ“œλŠ” λ…Έλ ₯을 쀄일 수 있음
    • μ£Όμ–΄μ§„ μ§‘ν•©κ³Ό λ™μΌν•œ 폐포λ₯Ό κ°–λŠ” λ‹¨μˆœν™”λœ FD 집합을 ν…ŒμŠ€νŠΈν•¨μœΌλ‘œμ¨
    • 이 λ‹¨μˆœν™”λœ 집합을 Canonical cover(μ •κ·œ 컀버)라고 함
  • μ •κ·œ 컀버λ₯Ό μ •μ˜ν•˜κΈ° μœ„ν•΄ λ¨Όμ € Extraneous attribute(λΆˆν•„μš”ν•œ 속성)λ₯Ό μ •μ˜ν•΄μ•Ό 함

Extraneous Attributes

  • FD의 μ™Όμͺ½μ—μ„œ 속성을 μ œκ±°ν•˜λ©΄ μ œμ•½μ‘°κ±΄μ΄ 더 강해짐
    • ABβ†’CAB \rightarrow CABβ†’Cκ°€ 있고 BBBλ₯Ό μ œκ±°ν•˜λ©΄, 잠재적으둜 더 κ°•ν•œ 결과인 Aβ†’CA \rightarrow CAβ†’Cλ₯Ό μ–»μŒ
    • Aβ†’CA \rightarrow CAβ†’CλŠ” ABβ†’CAB \rightarrow CABβ†’Cλ₯Ό λ…Όλ¦¬μ μœΌλ‘œ ν•¨μΆ•ν•˜μ§€λ§Œ, ABβ†’CAB \rightarrow CABβ†’C μžμ²΄λ§ŒμœΌλ‘œλŠ” Aβ†’CA \rightarrow CAβ†’Cλ₯Ό λ…Όλ¦¬μ μœΌλ‘œ ν•¨μΆ•ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— 더 κ°•ν•  수 있음
    • μ§‘ν•© F에 따라, ABβ†’CAB \rightarrow CABβ†’Cμ—μ„œ BBBλ₯Ό μ•ˆμ „ν•˜κ²Œ μ œκ±°ν•  수 있음
    • 예: F={ABβ†’C,Aβ†’D,Dβ†’C}F = \{AB \rightarrow C, A \rightarrow D, D \rightarrow C\}F={ABβ†’C,Aβ†’D,Dβ†’C}
    • 그러면 FλŠ” λ…Όλ¦¬μ μœΌλ‘œ Aβ†’CA \rightarrow CAβ†’Cλ₯Ό ν•¨μΆ•ν•˜λ―€λ‘œ(이행성), ABβ†’CAB \rightarrow CABβ†’Cμ—μ„œ BλŠ” λΆˆν•„μš”ν•¨
  • FD의 였λ₯Έμͺ½μ—μ„œ 속성을 μ œκ±°ν•˜λ©΄ μ œμ•½μ‘°κ±΄μ΄ 더 μ•½ν•΄μ§ˆ 수 있음
    • ABβ†’CDAB \rightarrow CDABβ†’CDκ°€ 있고 CCCλ₯Ό μ œκ±°ν•˜λ©΄, 잠재적으둜 더 μ•½ν•œ 결과인 ABβ†’DAB \rightarrow DABβ†’Dλ₯Ό μ–»μŒ
    • ABβ†’DAB \rightarrow DABβ†’Dλ§ŒμœΌλ‘œλŠ” ABβ†’CAB \rightarrow CABβ†’Cλ₯Ό μΆ”λ‘ ν•  수 μ—†μœΌλ―€λ‘œ 더 μ•½ν•  수 있음
    • μ§‘ν•© F에 따라, ABβ†’CDAB \rightarrow CDABβ†’CDμ—μ„œ CCCλ₯Ό μ•ˆμ „ν•˜κ²Œ μ œκ±°ν•  수 있음
    • 예: F={ABβ†’CD,Aβ†’C}F = \{AB \rightarrow CD, A \rightarrow C\}F={ABβ†’CD,Aβ†’C}
    • ABβ†’CDAB \rightarrow CDABβ†’CDλ₯Ό ABβ†’DAB \rightarrow DABβ†’D둜 λŒ€μ²΄ν•œ 후에도, μ—¬μ „νžˆ ABβ†’CAB \rightarrow CABβ†’Cλ₯Ό μΆ”λ‘ ν•  수 있으며(Aβ†’CA \rightarrow CAβ†’Cλ‘œλΆ€ν„°), λ”°λΌμ„œ ABβ†’CDAB \rightarrow CDABβ†’CDλ₯Ό μΆ”λ‘ ν•  수 μžˆμŒμ„ 보일 수 있음

Extraneous Attributes

  • F에 μžˆλŠ” FD의 속성은 F+λ₯Ό λ³€κ²½ν•˜μ§€ μ•Šκ³  μ œκ±°ν•  수 μžˆμ„ λ•Œ λΆˆν•„μš”ν•¨
  • ν•¨μˆ˜ 쒅속성 μ§‘ν•© F와 F에 μžˆλŠ” FD Ξ±β†’Ξ²\alpha \rightarrow \betaΞ±β†’Ξ²λ₯Ό κ³ λ €
    • μ™Όμͺ½μ—μ„œ 제거: 속성 AAAλŠ” Ξ±\alphaΞ±μ—μ„œ λΆˆν•„μš”ν•¨ if
      • A∈αA \in \alphaA∈α 이고
      • FλŠ” (Fβˆ’{Ξ±β†’Ξ²})βˆͺ{(Ξ±βˆ’A)β†’Ξ²}(F - \{\alpha \rightarrow \beta\}) \cup \{(\alpha - A) \rightarrow \beta\}(Fβˆ’{Ξ±β†’Ξ²})βˆͺ{(Ξ±βˆ’A)β†’Ξ²}λ₯Ό λ…Όλ¦¬μ μœΌλ‘œ 함좕
    • 였λ₯Έμͺ½μ—μ„œ 제거: 속성 AAAλŠ” Ξ²\betaΞ²μ—μ„œ λΆˆν•„μš”ν•¨ if
      • A∈βA \in \betaA∈β 이고
      • ν•¨μˆ˜ 쒅속성 μ§‘ν•© (Fβˆ’{Ξ±β†’Ξ²})βˆͺ{Ξ±β†’(Ξ²βˆ’A)}(F - \{\alpha \rightarrow \beta\}) \cup \{\alpha \rightarrow (\beta - A)\}(Fβˆ’{Ξ±β†’Ξ²})βˆͺ{Ξ±β†’(Ξ²βˆ’A)}κ°€ Fλ₯Ό λ…Όλ¦¬μ μœΌλ‘œ 함좕
  • 즉, μ•½ν•œ Fλ‘œλΆ€ν„° 더 κ°•ν•œ Fλ₯Ό λ…Όλ¦¬μ μœΌλ‘œ 함좕할 수 μžˆμ„ λ•Œ 속성은 λΆˆν•„μš”ν•¨
  • μ°Έκ³ : "더 κ°•ν•œ" ν•¨μˆ˜ 쒅속성은 항상 "더 μ•½ν•œ" 것을 ν•¨μΆ•ν•˜λ―€λ‘œ, μœ„μ˜ 각 κ²½μš°μ—μ„œ λ°˜λŒ€ λ°©ν–₯의 함좕은 자λͺ…함

Testing if an Attribute is Extraneous

  • 관계 μŠ€ν‚€λ§ˆ RRRκ³Ό RRRμ—μ„œ μ„±λ¦½ν•˜λŠ” ν•¨μˆ˜ 쒅속성 μ§‘ν•© FFFλ₯Ό κ°€μ •ν•˜κ³ , ν•¨μˆ˜ 쒅속성 Ξ±β†’Ξ²\alpha \rightarrow \betaΞ±β†’Ξ²μ˜ 속성을 κ³ λ €
  • 속성 A∈βA \in \betaAβˆˆΞ²κ°€ Ξ²\betaΞ²μ—μ„œ λΆˆν•„μš”ν•œμ§€ ν…ŒμŠ€νŠΈ
    • 더 μ•½ν•œ μ§‘ν•© κ³ λ €: Fβ€²=(Fβˆ’{Ξ±β†’Ξ²})βˆͺ{Ξ±β†’(Ξ²βˆ’A)}F' = (F - \{\alpha \rightarrow \beta\}) \cup \{\alpha \rightarrow (\beta - A)\}Fβ€²=(Fβˆ’{Ξ±β†’Ξ²})βˆͺ{Ξ±β†’(Ξ²βˆ’A)}
    • Fβ€²F'Fβ€² ν•˜μ—μ„œ Ξ±+\alpha^+Ξ±+κ°€ AAAλ₯Ό ν¬ν•¨ν•˜λŠ”μ§€ 확인; ν¬ν•¨ν•˜λ©΄, AAAλŠ” Ξ²\betaΞ²μ—μ„œ λΆˆν•„μš”ν•¨
  • 속성 A∈αA \in \alphaAβˆˆΞ±κ°€ Ξ±\alphaΞ±μ—μ„œ λΆˆν•„μš”ν•œμ§€ ν…ŒμŠ€νŠΈ
    • Ξ³=Ξ±βˆ’{A}\gamma = \alpha - \{A\}Ξ³=Ξ±βˆ’{A}라 ν•˜μž. 더 κ°•ν•œ FD Ξ³β†’Ξ²\gamma \rightarrow \betaΞ³β†’Ξ²κ°€ Fλ‘œλΆ€ν„° 좔둠될 수 μžˆλŠ”μ§€ 확인
    • F의 쒅속성을 μ‚¬μš©ν•˜μ—¬ Ξ³+\gamma^+Ξ³+λ₯Ό 계산
    • Ξ³+\gamma^+Ξ³+κ°€ Ξ²\betaβ의 λͺ¨λ“  속성을 ν¬ν•¨ν•˜λ©΄, AAAλŠ” Ξ±\alphaΞ±μ—μ„œ λΆˆν•„μš”ν•¨
  • λΆˆν•„μš”ν•œ μ†μ„±μ˜ 예
    • F={ABβ†’CD,Aβ†’E,Eβ†’C}F = \{AB \rightarrow CD, A \rightarrow E, E \rightarrow C\}F={ABβ†’CD,Aβ†’E,Eβ†’C}
    • ABβ†’CDAB \rightarrow CDABβ†’CDμ—μ„œ CCCκ°€ λΆˆν•„μš”ν•œμ§€ ν™•μΈν•˜κΈ° μœ„ν•΄,
    • Fβ€²={ABβ†’D,Aβ†’E,Eβ†’C}F' = \{AB \rightarrow D, A \rightarrow E, E \rightarrow C\}Fβ€²={ABβ†’D,Aβ†’E,Eβ†’C} ν•˜μ—μ„œ ABABAB의 속성 폐포 계산
    • νν¬λŠ” ABCDEABCDEABCDE이며, CCCλ₯Ό 포함함
    • μ΄λŠ” CCCκ°€ λΆˆν•„μš”ν•¨μ„ 의미

Canonical Cover

  • F에 λŒ€ν•œ μ •κ·œ 컀버 FCF_CFCβ€‹λŠ” λ‹€μŒκ³Ό 같은 쒅속성 μ§‘ν•©μž„
    • FλŠ” FCF_CFCβ€‹μ˜ λͺ¨λ“  쒅속성을 λ…Όλ¦¬μ μœΌλ‘œ 함좕
    • FCF_CFCβ€‹λŠ” F의 λͺ¨λ“  쒅속성을 λ…Όλ¦¬μ μœΌλ‘œ 함좕
    • FCF_CFCβ€‹μ˜ μ–΄λ–€ ν•¨μˆ˜ 쒅속성도 λΆˆν•„μš”ν•œ 속성을 ν¬ν•¨ν•˜μ§€ μ•ŠμŒ
    • FCF_CFCβ€‹μ˜ 각 ν•¨μˆ˜ μ’…μ†μ„±μ˜ μ™Όμͺ½μ€ κ³ μœ ν•¨. 즉, Ξ±1=Ξ±2\alpha_1 = \alpha_2Ξ±1​=Ξ±2​인 두 쒅속성 Ξ±1β†’Ξ²1\alpha_1 \rightarrow \beta_1Ξ±1​→β1​과 Ξ±2β†’Ξ²2\alpha_2 \rightarrow \beta_2Ξ±2​→β2​가 FCF_CFC​에 μ‘΄μž¬ν•˜μ§€ μ•ŠμŒ
  • μ΄λŠ” FC+=F+F_C^+ = F^+FC+​=F+λ₯Ό 의미
  • μ§κ΄€μ μœΌλ‘œ, F의 μ •κ·œ μ»€λ²„λŠ” 쀑볡 μ’…μ†μ„±μ΄λ‚˜ μ’…μ†μ„±μ˜ 쀑볡 뢀뢄이 μ—†λŠ”, F와 λ™λ“±ν•œ "μ΅œμ†Œ" FD μ§‘ν•©μž„.

Canonical Cover

  • F에 λŒ€ν•œ μ •κ·œ 컀버λ₯Ό κ³„μ‚°ν•˜λŠ” 방법:
    FC = F
    repeat
        Use the union rule to replace any dependencies in FC
            of the form Ξ±1β†’Ξ²1 and Ξ±1β†’Ξ²2 with Ξ±1β†’Ξ²1Ξ²2
        Find a functional dependency Ξ±β†’Ξ² in FC with an extraneous
            attribute either in Ξ± or in Ξ²
            /- Note: test for extraneous attributes done using FC, not F -/
        If an extraneous attribute is found, delete it from Ξ±β†’Ξ² in FC
    until (FC does not change)
    
  • μ°Έκ³ : 일뢀 λΆˆν•„μš”ν•œ 속성이 μ‚­μ œλœ ν›„ ν•©μ§‘ν•© κ·œμΉ™μ΄ 적용 κ°€λŠ₯ν•΄μ§ˆ 수 μžˆμœΌλ―€λ‘œ, λ‹€μ‹œ μ μš©ν•΄μ•Ό 함.

Example: Computing a Canonical Cover

  • R=(A,B,C)R = (A, B, C)R=(A,B,C), F={Aβ†’BC,Bβ†’C,Aβ†’B,ABβ†’C}F = \{ A \rightarrow BC, B \rightarrow C, A \rightarrow B, AB \rightarrow C \}F={Aβ†’BC,Bβ†’C,Aβ†’B,ABβ†’C}
  • Aβ†’BCA \rightarrow BCAβ†’BC와 Aβ†’BA \rightarrow BAβ†’Bλ₯Ό Aβ†’BCA \rightarrow BCAβ†’BC둜 κ²°ν•©
  • FCF_CFCβ€‹λŠ” 이제 {Aβ†’BC,Bβ†’C,ABβ†’C}\{ A \rightarrow BC, B \rightarrow C, AB \rightarrow C \}{Aβ†’BC,Bβ†’C,ABβ†’C}
  • ABβ†’CAB \rightarrow CABβ†’Cμ—μ„œ AAAκ°€ λΆˆν•„μš”ν•¨
    • ABβ†’CAB \rightarrow CABβ†’Cμ—μ„œ AAAλ₯Ό μ‚­μ œν•œ κ²°κ³Ό(즉, Bβ†’CB \rightarrow CBβ†’C)κ°€ λ‹€λ₯Έ 쒅속성듀에 μ˜ν•΄ ν•¨μΆ•λ˜λŠ”μ§€ 확인
    • 예: 사싀 Bβ†’CB \rightarrow CBβ†’CλŠ” 이미 μ‘΄μž¬ν•¨
  • FCF_CFCβ€‹λŠ” 이제 {Aβ†’BC,Bβ†’C}\{ A \rightarrow BC, B \rightarrow C \}{Aβ†’BC,Bβ†’C}
  • Aβ†’BCA \rightarrow BCAβ†’BCμ—μ„œ CCCκ°€ λΆˆν•„μš”ν•¨
    • Aβ†’CA \rightarrow CAβ†’Cκ°€ Aβ†’BA \rightarrow BAβ†’B와 λ‹€λ₯Έ 쒅속성듀에 μ˜ν•΄ λ…Όλ¦¬μ μœΌλ‘œ ν•¨μΆ•λ˜λŠ”μ§€ 확인
    • 예: Aβ†’BA \rightarrow BAβ†’B와 Bβ†’CB \rightarrow CBβ†’C에 λŒ€ν•œ 이행성을 μ‚¬μš©ν•˜μ—¬
    • 더 λ³΅μž‘ν•œ κ²½μš°μ—λŠ” A의 속성 폐포λ₯Ό μ‚¬μš©ν•  수 있음
  • μ •κ·œ μ»€λ²„λŠ”: FC={Aβ†’B,Bβ†’C}F_C = \{ A \rightarrow B, B \rightarrow C \}FC​={Aβ†’B,Bβ†’C}

Dependency Preservation

  • RRR에 λŒ€ν•œ ν•¨μˆ˜ 쒅속성 μ§‘ν•© FFF와 RRR의 λΆ„ν•΄ {R1,…,Rn}\{R_1, \dots, R_n\}{R1​,…,Rn​}을 κ°€μ •
  • FiF_iFi​λ₯Ό RiR_iRiβ€‹μ˜ μ†μ„±λ§Œμ„ ν¬ν•¨ν•˜λŠ” F+F^+F+의 λͺ¨λ“  FD μ§‘ν•©(즉, F의 RiR_iRi​에 λŒ€ν•œ μ œν•œ)이라 ν•˜κ³ , Fβ€²=F1βˆͺF2βˆͺβ‹―βˆͺFnF' = F_1 \cup F_2 \cup \dots \cup F_nFβ€²=F1​βˆͺF2​βˆͺβ‹―βˆͺFn​이라 ν•˜μž
  • λΆ„ν•΄κ°€ 쒅속성을 λ³΄μ‘΄ν•œλ‹€λ©΄,

    Fβ€²+=(F1βˆͺF2βˆͺβ‹―βˆͺFn)+=F+F'^+ = (F_1 \cup F_2 \cup \dots \cup F_n)^+ = F^+ Fβ€²+=(F1​βˆͺF2​βˆͺβ‹―βˆͺFn​)+=F+

  • 즉, 각 RiR_iRiβ€‹μ˜ FDλ₯Ό μ‚¬μš©ν•˜μ—¬ μ›λž˜ FDλ₯Ό ꡬ성할 수 있음
  • λΆ„ν•΄κ°€ 쒅속성을 λ³΄μ‘΄ν•˜μ§€ μ•ŠμœΌλ©΄ ν•¨μˆ˜ 쒅속성 μœ„λ°˜μ— λŒ€ν•œ μ—…λ°μ΄νŠΈ 확인 μ‹œ λΉ„μš©μ΄ 많이 λ“œλŠ” 쑰인(join)을 계산해야 ν•  수 있음
  • κ·ΈλŸ¬λ‚˜ λΆ„ν•΄κ°€ 쒅속성을 λ³΄μ‘΄ν•˜λ©΄, μ΄λŸ¬ν•œ 확인이 μš©μ΄ν•΄μ§
    • 각 RiR_iRiβ€‹μ—μ„œ FiF_iFiβ€‹λ§Œ ν™•μΈν•˜λ©΄ 좩뢄함
    • 그리고 FiF_iFiβ€‹μ˜ λͺ¨λ“  FDλŠ” RiR_iRiβ€‹μ˜ μ†μ„±λ§Œμ„ ν¬ν•¨ν•˜λ―€λ‘œ, 쑰인을 ν•˜μ§€ μ•Šκ³  ν•˜λ‚˜μ˜ κ΄€κ³„λ§Œ ν™•μΈν•˜μ—¬ ν•΄λ‹Ή μ’…μ†μ„±μ˜ 만쑱 μ—¬λΆ€λ₯Ό ν…ŒμŠ€νŠΈν•  수 있음

(Optional) Testing for Dependency Preservation

  • RRR을 R1,R2,…,RnR_1, R_2, \dots, R_nR1​,R2​,…,Rnβ€‹μœΌλ‘œ λΆ„ν•΄ν•  λ•Œ 쒅속성 Ξ±β†’Ξ²\alpha \rightarrow \betaΞ±β†’Ξ²κ°€ λ³΄μ‘΄λ˜λŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•΄ λ‹€μŒ ν…ŒμŠ€νŠΈλ₯Ό 적용 (속성 νν¬λŠ” F둜 계산)
    result = Ξ± // resultλŠ” α에 μ’…μ†λ˜λŠ” μ†μ„±λ“€μ˜ μ§‘ν•©, μ΄ˆκΈ°μ—λŠ” Ξ± μžμ‹ 
    repeat
        for each Ri in the decomposition // Fi ν•˜μ—μ„œ (result)+λ₯Ό 찾음
            t = (result ∩ Ri)+ ∩ Ri
            result = result βˆͺ t
    until (result does not change) // F' ν•˜μ—μ„œ (result)+λ₯Ό 찾음
    
  • resultκ°€ Ξ²\betaβ의 λͺ¨λ“  속성을 ν¬ν•¨ν•˜λ©΄, ν•¨μˆ˜ 쒅속성 Ξ±β†’Ξ²\alpha \rightarrow \betaΞ±β†’Ξ²λŠ” 보쑴됨
  • λΆ„ν•΄κ°€ 쒅속성을 λ³΄μ‘΄ν•˜λŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•΄ F의 λͺ¨λ“  쒅속성에 λŒ€ν•΄ ν…ŒμŠ€νŠΈλ₯Ό 적용
  • 이 μ ˆμ°¨λŠ” F+F^+F+와 (F1βˆͺF2βˆͺβ‹―βˆͺFn)+(F_1 \cup F_2 \cup \dots \cup F_n)^+(F1​βˆͺF2​βˆͺβ‹―βˆͺFn​)+λ₯Ό κ³„μ‚°ν•˜λŠ” 데 ν•„μš”ν•œ μ§€μˆ˜ μ‹œκ°„μ΄ μ•„λ‹Œ λ‹€ν•­ μ‹œκ°„μ΄ μ†Œμš”λ¨

Algorithms for Decomposition Using Functional Dependencies

Testing for BCNF

  • 자λͺ…ν•˜μ§€ μ•Šμ€(non-trivial) 쒅속성 Ξ±β†’Ξ²\alpha \rightarrow \betaΞ±β†’Ξ²κ°€ BCNF μœ„λ°˜μ„ μΌμœΌν‚€λŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•΄
    1. Ξ±+\alpha^+Ξ±+(Ξ±\alphaα의 속성 폐포)λ₯Ό κ³„μ‚°ν•˜κ³ ,
    2. 그것이 RRR의 λͺ¨λ“  속성을 ν¬ν•¨ν•˜λŠ”μ§€, 즉 RRR의 μŠˆνΌν‚€μΈμ§€ 확인
  • 관계 μŠ€ν‚€λ§ˆ RRR이 BCNF에 μžˆλŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•΄
    • λ‹¨μˆœν™”λœ ν…ŒμŠ€νŠΈ: F+F^+F+κ°€ μ•„λ‹Œ FFF의 FD에 λŒ€ν•΄μ„œλ§Œ BCNF μœ„λ°˜ μ—¬λΆ€ 확인
    • FFF의 쒅속성 쀑 μ–΄λŠ 것도 BCNF μœ„λ°˜μ„ μΌμœΌν‚€μ§€ μ•ŠμœΌλ©΄, F+F^+F+의 쒅속성 쀑 μ–΄λŠ 것도 BCNF μœ„λ°˜μ„ μΌμœΌν‚€μ§€ μ•ŠμŒ
    • κ·ΈλŸ¬λ‚˜, RRR의 λΆ„ν•΄μ—μ„œ 관계λ₯Ό ν…ŒμŠ€νŠΈν•  λ•Œ FFF만 μ‚¬μš©ν•˜λŠ” λ‹¨μˆœν™”λœ ν…ŒμŠ€νŠΈλŠ” 뢀정확함
    • R=(A,B,C,D,E)R = (A, B, C, D, E)R=(A,B,C,D,E), F={Aβ†’B,BCβ†’D}F = \{A \rightarrow B, BC \rightarrow D\}F={Aβ†’B,BCβ†’D}λ₯Ό κ³ λ €
    • RRR을 R1=(A,B)R_1 = (A, B)R1​=(A,B)와 R2=(A,C,D,E)R_2 = (A, C, D, E)R2​=(A,C,D,E)둜 λΆ„ν•΄
    • FFF의 쒅속성 쀑 μ–΄λŠ 것도 (A,C,D,E)(A, C, D, E)(A,C,D,E)의 μ†μ„±λ§Œμ„ ν¬ν•¨ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ, R2R_2R2​가 BCNFλ₯Ό λ§Œμ‘±ν•œλ‹€κ³  μ˜€ν•΄ν•  수 있음
    • 사싀, F+F^+F+의 쒅속성 ACβ†’DAC \rightarrow DACβ†’DλŠ” R2R_2R2​가 BCNF에 μžˆμ§€ μ•ŠμŒμ„ λ³΄μ—¬μ€Œ

(Optional) Testing Decomposition for BCNF

  • RRR의 뢄해에 μžˆλŠ” 관계 RiR_iRi​가 BCNF에 μžˆλŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•΄
    • FiF_iFi​(즉, RiR_iRiβ€‹μ˜ μ†μ„±λ§Œμ„ ν¬ν•¨ν•˜λŠ” F+F^+F+의 λͺ¨λ“  FD)에 λŒ€ν•΄ RiR_iRi​λ₯Ό BCNF ν…ŒμŠ€νŠΈ
    • λ˜λŠ” RRRμ—μ„œ μ„±λ¦½ν•˜λŠ” μ›λž˜μ˜ 쒅속성 μ§‘ν•© Fλ₯Ό μ‚¬μš©ν•˜λ˜, λ‹€μŒ ν…ŒμŠ€νŠΈλ₯Ό μ‚¬μš©:
      • λͺ¨λ“  속성 μ§‘ν•© Ξ±βŠ†Ri\alpha \subseteq R_iΞ±βŠ†Ri​에 λŒ€ν•΄, Ξ±+\alpha^+Ξ±+κ°€ Riβˆ’Ξ±R_i - \alphaRiβ€‹βˆ’Ξ±μ˜ 속성을 ν¬ν•¨ν•˜μ§€ μ•Šκ±°λ‚˜, RiR_iRiβ€‹μ˜ λͺ¨λ“  속성을 ν¬ν•¨ν•˜λŠ”μ§€ 확인
    • λ§Œμ•½ F+F^+F+의 μ–΄λ–€ Ξ±β†’Ξ²\alpha \rightarrow \betaα→β에 μ˜ν•΄ 쑰건이 μœ„λ°˜λ˜λ©΄, 쒅속성 Ξ±β†’(Ξ±+βˆ’Ξ±)∩Ri\alpha \rightarrow (\alpha^+ - \alpha) \cap R_iΞ±β†’(Ξ±+βˆ’Ξ±)∩Ri​가 RiR_iRiβ€‹μ—μ„œ 성립함을 보일 수 있고, RiR_iRiβ€‹λŠ” BCNFλ₯Ό μœ„λ°˜ν•¨
    • RiR_iRi​λ₯Ό λΆ„ν•΄ν•˜κΈ° μœ„ν•΄ μœ„μ˜ 쒅속성을 μ‚¬μš©
    • ν›„μžμ˜ ν…ŒμŠ€νŠΈλŠ” F의 λͺ¨λ“  Ξ±β†’Ξ²\alpha \rightarrow \betaΞ±β†’Ξ²μ—μ„œ Ξ±+\alpha^+Ξ±+λ₯Ό ν™•μΈν•˜λŠ” λŒ€μ‹ , RiR_iRiβ€‹μ˜ 'λͺ¨λ“  속성 λΆ€λΆ„μ§‘ν•©'의 속성 폐포λ₯Ό 확인

BCNF Decomposition Algorithm

result := {R};
done := false;
compute F+;
while (not done) do
    if (there is a schema Ri in result that is not in BCNF) then
        begin
            let Ξ±β†’Ξ² be a nontrivial functional dependency that holds on Ri
                such that Ξ±β†’Ri is not in F+ , and α∩β = βˆ…;
            // μ΄λŠ” Ξ±κ°€ Ri의 μŠˆνΌν‚€κ°€ μ•„λ‹˜μ„ 의미
            result := (result – Ri) βˆͺ (Ri – Ξ²) βˆͺ (Ξ±, Ξ²);
        end
    else
        done := true;
  • μ°Έκ³ : 각 RiR_iRiβ€‹λŠ” BCNF에 있으며, λΆ„ν•΄λŠ” 무손싀-쑰인(lossless-join)μž„.

Example of BCNF Decomposition

  • class(course_id, title, dept_name, credits, sec_id, semester, year, building, room_number, capacity, time_slot_id)
  • ν•¨μˆ˜ 쒅속성:
    • course_id β†’ title, dept_name, credits
    • building, room_number β†’ capacity
    • course_id, sec_id, semester, year β†’ building, room_number, time_slot_id
  • 후보 ν‚€: {course_id, sec_id, semester, year}
  • BCNF λΆ„ν•΄:
    • course_id β†’ title, dept_name, creditsκ°€ 성립
    • κ·ΈλŸ¬λ‚˜ course_idλŠ” μŠˆνΌν‚€κ°€ μ•„λ‹˜
    • classλ₯Ό λ‹€μŒμœΌλ‘œ λŒ€μ²΄:
      • course(course_id, title, dept_name, credits)
      • class-1(course_id, sec_id, semester, year, building, room_number, capacity, time_slot_id)

Example of BCNF Decomposition

  • courseλŠ” BCNF에 있음
  • building, room_number β†’ capacityκ°€ class-1μ—μ„œ 성립
  • κ·ΈλŸ¬λ‚˜ {building, room_number}λŠ” class-1의 μŠˆνΌν‚€κ°€ μ•„λ‹˜
  • class-1을 λ‹€μŒμœΌλ‘œ λŒ€μ²΄:
    • classroom(building, room_number, capacity)
    • section(course_id, sec_id, semester, year, building, room_number, time_slot_id)
  • classroomκ³Ό section은 BCNF에 있음

Testing for 3NF

  • BCNF ν…ŒμŠ€νŠΈμ—μ„œμ²˜λŸΌ, FFF의 FD만 ν™•μΈν•˜λ©΄ 됨 (F+F^+F+의 λͺ¨λ“  FDλ₯Ό 확인할 ν•„μš” μ—†μŒ)
  • 각 쒅속성 Ξ±β†’Ξ²\alpha \rightarrow \betaα→β에 λŒ€ν•΄, Ξ±\alphaΞ±κ°€ μŠˆνΌν‚€μΈμ§€ μ•„λ‹Œμ§€ ν™•μΈν•˜κΈ° μœ„ν•΄ 속성 폐포 μ‚¬μš©
  • Ξ±\alphaΞ±κ°€ μŠˆνΌν‚€κ°€ μ•„λ‹ˆλ©΄, Ξ²\betaβ의 각 속성이 RRR의 후보 킀에 ν¬ν•¨λ˜μ–΄ μžˆλŠ”μ§€ 확인해야 함
  • 이 ν…ŒμŠ€νŠΈλŠ” 후보 ν‚€λ₯Ό μ°ΎλŠ” 것을 ν¬ν•¨ν•˜λ―€λ‘œ μƒλ‹Ήνžˆ 더 λΉ„μš©μ΄ 많이 듦
  • 3NF ν…ŒμŠ€νŠΈλŠ” NP-hard(NP-λ‚œν•΄)인 κ²ƒμœΌλ‘œ λ‚˜νƒ€λ‚¨
  • ν₯λ―Έλ‘­κ²Œλ„, 3NF둜의 λΆ„ν•΄λŠ” λ‹€ν•­ μ‹œκ°„μ— μˆ˜ν–‰λ  수 있음

3NF Decomposition Algorithm

Let FC be a canonical cover for F;
i := 0;
for each FD Ξ±β†’Ξ² in FC
    i := i + 1;
    Ri := Ξ±Ξ²;

if none of Rj(1 ≀ j ≀ i) contains a candidate key for R
    then
        i := i + 1;
        Ri := any candidate key for R;

/- Optionally, remove redundant relations -/
repeat
    if any schema Rj is contained in another schema Rk
    then
        /- delete Rj -/
        Rj := Ri;
        i := i - 1;
until no more Rjs can be deleted

return (R1, R2, ..., Ri)
  • μœ„ μ•Œκ³ λ¦¬μ¦˜μ€ λ‹€μŒμ„ 보μž₯
    • 각 관계 μŠ€ν‚€λ§ˆ RiR_iRiβ€‹λŠ” 3NF에 있음
    • λΆ„ν•΄λŠ” 쒅속성 보쑴 및 무손싀-μ‘°μΈμž„
  • μ •ν™•μ„± 증λͺ…은 ꡐ재(μ„Ήμ…˜ 7.5.3) μ°Έμ‘°

3NF Decomposition: An Example

  • 관계 μŠ€ν‚€λ§ˆ: cust_banker_branch = (customer_id, employee_id, branch_name, type)
  • 이 관계 μŠ€ν‚€λ§ˆμ˜ ν•¨μˆ˜ 쒅속성:
    • customer_id, employee_id β†’ branch_name, type
    • employee_id β†’ branch_name
    • customer_id, branch_name β†’ employee_id
  • λ¨Όμ € μ •κ·œ 컀버λ₯Ό 계산
    • 첫 번째 μ’…μ†μ„±μ˜ 였λ₯Έμͺ½μ—μ„œ branch_name이 λΆˆν•„μš”ν•¨
    • λ‹€λ₯Έ λΆˆν•„μš”ν•œ 속성은 μ—†μœΌλ―€λ‘œ, FCF_CFC​λ₯Ό μ–»μŒ
      • customer_id, employee_id β†’ type
      • employee_id β†’ branch_name
      • customer_id, branch_name β†’ employee_id

3NF Decomposition: An Example

  • for λ£¨ν”„λŠ” λ‹€μŒμ˜ 3NF μŠ€ν‚€λ§ˆλ₯Ό 생성:
    • (customer_id, employee_id, type)
    • (employee_id, branch_name)
    • (customer_id, branch_name, employee_id)
  • (customer_id, employee_id, type)이 μ›λž˜ μŠ€ν‚€λ§ˆμ˜ 후보 ν‚€λ₯Ό ν¬ν•¨ν•˜λ―€λ‘œ, 더 μ΄μƒμ˜ 관계 μŠ€ν‚€λ§ˆλ₯Ό μΆ”κ°€ν•  ν•„μš”κ°€ μ—†μŒ
  • for λ£¨ν”„μ˜ λμ—μ„œ, (customer_id, branch_name, employee_id) μŠ€ν‚€λ§ˆμ˜ 뢀뢄집합인 (employee_id, branch_name) μŠ€ν‚€λ§ˆλ₯Ό κ°μ§€ν•˜κ³  μ‚­μ œ
  • 결과적인 λ‹¨μˆœν™”λœ 3NF μŠ€ν‚€λ§ˆλŠ” λ‹€μŒκ³Ό κ°™μŒ:
    • (customer_id, employee_id, type)
    • (customer_id, branch_name, employee_id)

Design Goals

  • κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€ μ„€κ³„μ˜ λͺ©ν‘œ: μŠ€ν‚€λ§ˆλ₯Ό λ‹€μŒκ³Ό 같이 λΆ„ν•΄
    • BCNF
    • Lossless(무손싀)
    • Dependency preservation(쒅속성 보쑴)
  • 이λ₯Ό 달성할 수 μ—†λ‹€λ©΄, λ‹€μŒ 쀑 ν•˜λ‚˜λ₯Ό 수용
    • 쒅속성 보쑴의 λΆ€μž¬
    • 3NF μ‚¬μš©μœΌλ‘œ μΈν•œ 쀑볡성
  • ν₯λ―Έλ‘­κ²Œλ„, SQL은 μŠˆνΌν‚€ μ΄μ™Έμ˜ ν•¨μˆ˜ 쒅속성을 μ§€μ •ν•˜λŠ” 직접적인 방법을 μ œκ³΅ν•˜μ§€ μ•ŠμŒ
    • Assertion(단언)을 μ‚¬μš©ν•˜μ—¬ FDλ₯Ό μ§€μ •ν•  수 μžˆμ§€λ§Œ, ν…ŒμŠ€νŠΈ λΉ„μš©μ΄ λΉ„μŒˆ (그리고 ν˜„μž¬ 널리 μ‚¬μš©λ˜λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ μ§€μ›λ˜μ§€ μ•ŠμŒ)
    • 쒅속성 보쑴 λΆ„ν•΄κ°€ μžˆλ”λΌλ„, SQL을 μ‚¬μš©ν•˜λ©΄ μ™Όμͺ½μ΄ ν‚€κ°€ μ•„λ‹Œ ν•¨μˆ˜ 쒅속성을 효율적으둜 ν…ŒμŠ€νŠΈν•  수 μ—†μŒ

and Others

Initial Relation Schemas

  • 초기 관계 μŠ€ν‚€λ§ˆ R이 μ£Όμ–΄μ‘Œμ„ λ•Œ:
    • R은 E-R λ‹€μ΄μ–΄κ·Έλž¨μ„ ν…Œμ΄λΈ” μ§‘ν•©μœΌλ‘œ λ³€ν™˜ν•  λ•Œ μƒμ„±λ˜μ—ˆμ„ 수 있음
    • R은 관심 μžˆλŠ” λͺ¨λ“  속성을 ν¬ν•¨ν•˜λŠ” 단일 관계(Universal relation, 전체 관계)μ˜€μ„ 수 있음
    • μ •κ·œν™”λŠ” R을 더 μž‘μ€ κ΄€κ³„λ‘œ λΆ„ν•΄
    • R은 μž„μ‹œλ‘œ μ„€κ³„λœ κ΄€κ³„μ˜ 결과일 수 있으며, 이λ₯Ό ν…ŒμŠ€νŠΈ/μ •κ·œν˜•μœΌλ‘œ λ³€ν™˜

(Optional) E-R Model and Normalization

  • E-R λ‹€μ΄μ–΄κ·Έλž¨μ„ μ‹ μ€‘ν•˜κ²Œ μ„€κ³„ν•˜κ³  λͺ¨λ“  μ—”ν‹°ν‹°λ₯Ό μ˜¬λ°”λ₯΄κ²Œ μ‹λ³„ν•˜λ©΄, E-R λ‹€μ΄μ–΄κ·Έλž¨μ—μ„œ μƒμ„±λœ ν…Œμ΄λΈ”μ€ 좔가적인 μ •κ·œν™”κ°€ ν•„μš”ν•˜μ§€ μ•Šμ•„μ•Ό 함
  • κ·ΈλŸ¬λ‚˜ μ‹€μ œ (λΆˆμ™„μ „ν•œ) μ„€κ³„μ—μ„œλŠ” μ—”ν‹°ν‹°μ˜ ν‚€κ°€ μ•„λ‹Œ μ†μ„±μ—μ„œ μ—”ν‹°ν‹°μ˜ λ‹€λ₯Έ μ†μ„±μœΌλ‘œμ˜ FDκ°€ μžˆμ„ 수 있음 (λ”°λΌμ„œ BCNFκ°€ μ•„λ‹˜)
    • 예: employee μ—”ν‹°ν‹° (ID, name, dept_name, building, salary)
    • ν•¨μˆ˜ 쒅속성 dept_name β†’ building
    • 쒋은 μ„€κ³„λŠ” departmentλ₯Ό μ—”ν‹°ν‹°λ‘œ λ§Œλ“€μ—ˆμ„ κ²ƒμž„
  • 관계 μ§‘ν•©μ˜ ν‚€κ°€ μ•„λ‹Œ μ†μ„±μ—μ„œ λΉ„λ‘―λœ ν•¨μˆ˜ 쒅속성은 κ°€λŠ₯ν•˜μ§€λ§Œ, λŒ€λΆ€λΆ„μ˜ 관계가 이항(binary) κ΄€κ³„μ΄λ―€λ‘œ λ“œλ¬Ύ

Denormalization for Performance

  • μ„±λŠ₯을 μœ„ν•΄ λΉ„μ •κ·œν™”λœ μŠ€ν‚€λ§ˆλ₯Ό μ‚¬μš©ν•˜κ³  싢을 수 있음
  • 예: κ³Όμ • 정보에 μ ‘κ·Όν•  λ•Œλ§ˆλ‹€ λͺ¨λ“  μ„ μˆ˜κ³Όλͺ©μ΄ κ³Όμ • 정보와 ν•¨κ»˜ ν‘œμ‹œλ˜μ–΄μ•Ό ν•œλ‹€κ³  κ°€μ •
    • μ •κ·œν™”λœ μŠ€ν‚€λ§ˆμ—μ„œλŠ” course와 prereq의 쑰인이 ν•„μš”
  • λŒ€μ•ˆ 1: course와 prereq의 λͺ¨λ“  속성을 ν¬ν•¨ν•˜λŠ” λΉ„μ •κ·œν™”λœ 관계 μ‚¬μš©
    • 더 λΉ λ₯Έ 쑰회
    • μ€‘λ³΅μ„±μœΌλ‘œ μΈν•œ μΆ”κ°€ 곡간 및 μ—…λ°μ΄νŠΈμ— λŒ€ν•œ μΆ”κ°€ μ‹€ν–‰ μ‹œκ°„
    • μ‘μš© ν”„λ‘œκ·Έλž˜λ¨Έμ˜ μΆ”κ°€ μ½”λ”© μž‘μ—… 및 μΆ”κ°€ μ½”λ“œμ˜ 였λ₯˜ κ°€λŠ₯μ„±
  • λŒ€μ•ˆ 2: course β‹ˆ prereq둜 μ •μ˜λœ Materialized view(κ΅¬μ²΄ν™”λœ λ·°) μ‚¬μš©
    • ν”„λ‘œκ·Έλž˜λ¨Έμ˜ μΆ”κ°€ μ½”λ”© μž‘μ—…μ΄ μ—†κ³  κ°€λŠ₯ν•œ 였λ₯˜λ₯Ό ν”Όν•œλ‹€λŠ” 점을 μ œμ™Έν•˜λ©΄, μž₯단점은 μœ„μ™€ 동일

Limitation of the Normalization

  • μ •κ·œν™”λ‘œ ν¬μ°©λ˜μ§€ μ•ŠλŠ” λ°μ΄ν„°λ² μ΄μŠ€ μ„€κ³„μ˜ 일뢀 μΈ‘λ©΄
  • ν”Όν•΄μ•Ό ν•  λ‚˜μœ λ°μ΄ν„°λ² μ΄μŠ€ μ„€κ³„μ˜ 예:
    • earnings(company_id, year, amount) λŒ€μ‹  λ‹€μŒ μ‚¬μš©
      • earnings_2004, earnings_2005, earnings_2006 λ“±, λͺ¨λ‘ (company_id, earnings) μŠ€ν‚€λ§ˆ μ‚¬μš©.
      • μœ„λŠ” BCNF에 μžˆμ§€λ§Œ λ§€λ…„ μƒˆλ‘œμš΄ ν…Œμ΄λΈ”μ΄ ν•„μš”ν•˜κ³ , 각 μƒˆλ‘œμš΄ 관계λ₯Ό κ³ λ €ν•˜κΈ° μœ„ν•΄ λ§€λ…„ μƒˆλ‘œμš΄ 쿼리λ₯Ό μž‘μ„±ν•΄μ•Ό 함
      • μ—¬λŸ¬ 해에 걸친 쿼리도 λ§Žμ€ 관계λ₯Ό μ°Έμ‘°ν•΄μ•Ό ν•˜λ―€λ‘œ 더 λ³΅μž‘ν•΄μ§
    • company_year(company_id, earnings_2004, earnings_2005, earnings_2006)
      • BCNF에 μžˆμ§€λ§Œ, μœ„μ™€ λ™μΌν•œ λ¬Έμ œκ°€ 있음
    • ν•œ μ†μ„±μ˜ 값이 μ—΄ 이름이 λ˜λŠ” Crosstab(ꡐ차 λΆ„μ„ν‘œ)의 예둜, μŠ€ν”„λ ˆλ“œμ‹œνŠΈμ™€ 데이터 뢄석 λ„κ΅¬μ—μ„œ μ‚¬μš©λ¨
졜근 μˆ˜μ •: 25. 11. 6. μ˜€ν›„ 12:07
Contributors: kmbzn
Prev
7. Relational Database Design (1)
Next
13. Data Storage Structures

BUILT WITH

CloudflareNode.jsGitHubGitVue.jsJavaScriptVSCodenpm

All trademarks and logos are property of their respective owners.
Β© 2025 kmbzn Β· MIT License