λ°˜μ‘ν˜•
κ΅­λ―ΌλŒ€ν•™κ΅μ—μ„œ "였라클둜 λ°°μš°λŠ” λ°μ΄ν„°λ² μ΄μŠ€ 개둠과 μ‹€μŠ΅(2판)" 을 μ΄μš©ν•œ
μ‹ μΈμˆ˜ κ΅μˆ˜λ‹˜μ˜ κ°•μ˜ κ΅μ•ˆμ„ μ΄μš©ν•˜μ—¬ μˆ˜μ—… λ‚΄μš©μ„ μ •λ¦¬ν•˜μ˜€μŠ΅λ‹ˆλ‹€

 

 

 

1. μ΄μƒν˜„μƒ(anomaly)

 

1.1 μ΄μƒν˜„μƒμ˜ κ°œλ…

 

 

μ΄μƒν˜„μƒ(Anomaly)μ΄λž€  잘λͺ» μ„€κ³„λœ ν…Œμ΄λΈ”λ‘œ 인해 μ‚½μž…, μ‚­μ œ, μˆ˜μ • 같은 데이터 μ‘°μž‘ μ‹œ 데이터 일관성이 κΉ¨μ§€λŠ” ν˜„μƒ!

 

=> 뢈일치(inconsistency : 일관성 μ—†μŒ) 문제 λ°œμƒ

 

μ΄μƒν˜„μƒμ—λŠ” 

 

 

  • μ‚­μ œμ΄μƒ(deletion anomly)

    νˆ¬ν”Œ μ‚­μ œ μ‹œ 같이 μ €μž₯된 λ‹€λ₯Έ μ •λ³΄κΉŒμ§€ μ—°μ‡„μ μœΌλ‘œ μ‚­μ œλ˜λŠ” ν˜„μƒ
    (μ—°μ‡„μ‚­μ œ 문제 λ°œμƒ)

 

  • μ‚½μž…μ΄μƒ(insrtion anomly)

    νˆ¬ν”Œ μ‚½μž… μ‹œ νŠΉμ • 속성에 ν•΄λ‹Ήν•˜λŠ” 값이 μ—†μ–΄ NULL 값을 μž…λ ₯ν•΄μ•Ό ν•˜λŠ” ν˜„μƒ
    (NULL κ°’ 문제 λ°œμƒ)

 

 

  • μˆ˜μ •μ΄μƒ(update anomly)

    νˆ¬ν”Œ μˆ˜μ • μ‹œ μ€‘λ³΅λœ λ°μ΄ν„°μ˜ μΌλΆ€λ§Œ μˆ˜μ •λ˜μ–΄ λ°μ΄ν„°μ˜ 뢈일치 λ¬Έμ œκ°€ μΌμ–΄λ‚˜λŠ” ν˜„μƒ
    (뢈일치 문제 λ°œμƒ)

κ°€ μžˆλ‹€!


이런 경우 ν…Œμ΄λΈ” ꡬ쑰λ₯Ό μˆ˜μ •ν•˜μ—¬ (ν…Œμ΄λΈ”μ„ 뢄리) μ΄μƒν˜„μƒμ΄ μΌμ–΄λ‚˜μ§€ μ•Šκ²Œ 해야함

 

ex. Summer ν…Œμ΄λΈ”μ˜ class 속성을 κΈ°λ³Έν‚€λ‘œ ν•˜μ—¬ SummerPrice (각 class λ³„λ‘œ price만 담은 ν…Œμ΄λΈ”) κ³Ό
      Summer ν…Œμ΄λΈ”μ˜ sid 속성을 κΈ°λ³Έν‚€λ‘œ ν•˜μ—¬ SummerEnroll (각 sid λ³„λ‘œ class만 담은 ν…Œμ΄λΈ”) 을 λ”°λ‘œ λ§Œλ“¬

 

μ΄λ ‡κ²Œ ν•˜λ©΄ ν•™μƒμ˜ ν•™λ²ˆ(sid) λ³„λ‘œ μˆ˜κ°•ν•˜λŠ” κ³Όλͺ©μ„ 찾을 λ•ŒλŠ” SummerEnroll ν…Œμ΄λΈ”μ—μ„œ, κ°•μ’Œμ˜ μˆ˜κ°•λ£Œλ₯Ό μ•Œκ³  싢을 λ•ŒλŠ” SummerPrice ν…Œμ΄λΈ”μ—μ„œ κ΄€λ ¨ SQL문을 μž‘μ„±ν•˜μ—¬ μ²˜λ¦¬ν•  수 있음

=> μ‚­μ œ, μ‚½μž…, μˆ˜μ •μ΄ 각각 ν•΄λ‹Ήλ˜λŠ” ν…Œμ΄λΈ”μ—μ„œ μ§„ν–‰λ˜λ―€λ‘œ 이상 μ—†μŒ! 

 

 

2. ν•¨μˆ˜ 쒅속성

 

2.1 ν•¨μˆ˜ μ’…μ†μ„±μ˜ κ°œλ…

 


ν•™μƒμˆ˜κ°•μ„±μ  λ¦΄λ ˆμ΄μ…˜μ˜ 각 속성 μ‚¬μ΄μ—λŠ” μ˜μ‘΄μ„±μ΄ μ‘΄μž¬ν•¨

 

=> μ–΄λ–€ 속성 A의 값을 μ•Œλ©΄ λ‹€λ₯Έ 속성 B의 값이 μœ μΌν•˜κ²Œ μ •ν•΄μ§€λŠ” 의쑴 관계λ₯Ό '속성 BλŠ” 속성 A에 μ’…μ†ν•œλ‹€' ν˜Ήμ€
'속성 AλŠ” 속성 Bλ₯Ό κ²°μ •ν•œλ‹€' 라고 함

 

'A -> B'둜 ν‘œκΈ°ν•˜λ©°, Aλ₯Ό B의 κ²°μ •μžλΌκ³  함

 

 

 

2.2 ν•¨μˆ˜ 쒅속성 λ‹€μ΄μ–΄κ·Έλž¨

 

 

ν•¨μˆ˜ 쒅속성 λ‹€μ΄μ–΄κ·Έλž¨μ€ ν•¨μˆ˜ 쒅속성을 λ‚˜νƒ€λ‚΄λŠ” ν‘œκΈ°λ²•μ΄λ‹€

 

  • λ¦΄λ ˆμ΄μ…˜μ˜ 속성 : μ§μ‚¬κ°ν˜•
  • 속성 κ°„μ˜ ν•¨μˆ˜ 쒅속성 : ν™”μ‚΄ν‘œ
  • 볡합 속성 : μ§μ‚¬κ°ν˜•μœΌλ‘œ λ¬Άμ–΄μ„œ κ·Έλ¦Ό

 

 

 

2.3 ν•¨μˆ˜ 쒅속성 κ·œμΉ™

 

 

λ³΅μž‘ν•΄ λ³΄μ΄λŠ”λ° λ‹Ήμ—°ν•œ μ–˜κΈ°λ“€μ„ ν•˜κ³  있음..

 

 

2.4 ν•¨μˆ˜ 쒅속성과 κΈ°λ³Έν‚€

 

 

λ¦΄λ ˆμ΄μ…˜μ˜ ν•¨μˆ˜ 쒅속성을 νŒŒμ•…ν•˜κΈ° μœ„ν•΄μ„œλŠ” μš°μ„  κΈ°λ³Έν‚€λ₯Ό μ°Ύμ•„μ•Ό 함

 

=> κΈ°λ³Έν‚€κ°€ ν•¨μˆ˜ μ’…μ†μ„±μ—μ„œ μ–΄λ–€ 역할을 ν•˜λŠ”μ§€ μ•Œλ©΄ μ΄μƒν˜„μƒμ„ μ œκ±°ν•˜λŠ” μ •κ·œν™” 과정을 μ‰½κ²Œ 이해할 수 있음

 

λ¦΄λ ˆμ΄μ…˜ R(K, A1, A2, A3 , ... , An)μ—μ„œ Kκ°€ 기본킀이면, K -> R이 성립함

=> 즉, κΈ°λ³Έν‚€λŠ” λ¦΄λ ˆμ΄μ…˜μ˜ λͺ¨λ“  속성에 λŒ€ν•œ κ²°μ •μžμž„!

 

 

μ΄μƒν˜„μƒμ€ ν•œ 개의 λ¦΄λ ˆμ΄μ…˜μ— 두 개 μ΄μƒμ˜ 정보가 ν¬ν•¨λ˜μ–΄ μžˆμ„ λ•Œ λ‚˜νƒ€λ‚¨

(κΈ°λ³Έν‚€κ°€ μ•„λ‹ˆλ©΄μ„œ κ²°μ •μžμΈ 속성이 μžˆμ„ λ•Œ λ°œμƒ)

 

=> μœ„μ—μ„œ 봀던 ν•™μƒμˆ˜κ°•μ„±μ  λ¦΄λ ˆμ΄μ…˜μ˜ 경우 학생 정보(ν•™μƒλ²ˆν˜Έ, 학생이름, μ£Όμ†Œ, ν•™κ³Ό)와 κ°•μ’Œ 정보(κ°•μ’Œμ΄λ¦„, κ°•μ˜μ‹€) κ°€ ν•œ λ¦΄λ ˆμ΄μ…˜μ— ν¬ν•¨λ˜μ–΄μ„œ μ΄μƒν˜„μƒμ΄ λ‚˜νƒ€λ‚¨!

 

2.5 μ΄μƒν˜„μƒκ³Ό κ²°μ •μž

 

 

μ΄μƒν˜„μƒμ„ μ—†μ• λ €λ©΄ μœ„μ—μ„œ λ‹€λ€˜λ˜λŒ€λ‘œ λ¦΄λ ˆμ΄μ…˜μ„ 뢄해해야함

 

ν•™μƒμˆ˜κ°•μ„±μ  λ¦΄λ ˆμ΄μ…˜μ„ 예둜 μ‚΄νŽ΄λ³΄λ©΄

 

ν•™μƒμˆ˜κ°•μ„±μ  λ¦΄λ ˆμ΄μ…˜μ˜ ꡬ쑰

 

 

 

 

1단계 : (κ°•μ’Œμ΄λ¦„, κ°•μ˜μ‹€)을 κ°•μ˜μ‹€ λ¦΄λ ˆμ΄μ…˜μœΌλ‘œ 뢄리

 

 

 

2단계 : (ν•™μƒλ²ˆν˜Έ, κ°•μ’Œμ΄λ¦„, 성적)을 학생성적 λ¦΄λ ˆμ΄μ…˜μœΌλ‘œ 뢄리

 

 

 

 

3단계 : (ν•™κ³Ό, 학과사무싀)을 ν•™κ³Ό λ¦΄λ ˆμ΄μ…˜μœΌλ‘œ 뢄리

 

λΆ„ν•΄ν•  λ•Œ λΆ€λΆ„ λ¦΄λ ˆμ΄μ…˜μ˜ κ²°μ •μžλŠ” μ›λž˜ λ¦΄λ ˆμ΄μ…˜μ— 남겨두어야함

=> κ·Έλž˜μ•Ό λΆ„ν•΄λœ λΆ€λΆ„ λ¦΄λ ˆμ΄μ…˜μ΄ μ›λž˜ λ¦΄λ ˆμ΄μ…˜κ³Ό 관계λ₯Ό ν˜•μ„±ν•  수 있음

 

 

3. μ •κ·œν™” (normalization)

 

3.1 μ •κ·œν™” κ°œλ…

 

μ •κ·œν™”λž€ μ΄μƒν˜„μƒμ΄ λ°œμƒν•˜λŠ” λ¦΄λ ˆμ΄μ…˜μ„ λΆ„ν•΄ν•˜μ—¬ μ΄μƒν˜„μƒμ„ μ—†μ• λŠ” 과정이닀

 

=> μ΄μƒν˜„μƒμ΄ μžˆλŠ” λ¦΄λ ˆμ΄μ…˜μ€ μ΄μƒν˜„μƒμ„ μΌμœΌν‚€λŠ” ν•¨μˆ˜ μ’…μ†μ„±μ˜ μœ ν˜•μ— 따라 등급을 ꡬ뢄 κ°€λŠ₯

 

(μ •κ·œν˜•μ΄ λ†’μ„μˆ˜λ‘ μ΄μƒν˜„μƒμ€ 쀄어듦)

 

μ •κ·œν™” κ³Όμ •

 

 

 

제 1μ •κ·œν˜•

 

 

λ¦΄λ ˆμ΄μ…˜ R의 λͺ¨λ“  속성 값이 μ›μžκ°’μ„ κ°€μ§€λ©΄ 제 1μ •κ·œν˜•μ΄λΌκ³  함

 

 

제 2μ •κ·œν˜•

 

 

 


λ¦΄λ ˆμ΄μ…˜ R이 제 1μ •κ·œν˜•μ΄κ³ , κΈ°λ³Έν‚€κ°€ μ•„λ‹Œ 속성이 기본킀에 μ™„μ „ ν•¨μˆ˜ 쒅속일 λ•Œ 제 2μ •κ·œν˜•μ΄λΌκ³  함

 

μ™„μ „ ν•¨μˆ˜ 쒅속 : A와 Bκ°€ λ¦΄λ ˆμ΄μ…˜ R의 속성이고 A -> B 쒅속성이 성립할 λ•Œ, Bκ°€ A의 속성 전체에 ν•¨μˆ˜ μ’…μ†ν•˜κ³  λΆ€λΆ„ μ§‘ν•© 속성에 ν•¨μˆ˜ μ’…μ†ν•˜μ§€ μ•Šμ„ 경우 μ™„μ „ ν•¨μˆ˜ 쒅속이라고 함!

=> 예λ₯Ό λ“€μ–΄, κΈ°λ³Έν‚€κ°€ {A, B}인 경우, 속성 Cκ°€ {A, B}에 λŒ€ν•΄ μ™„μ „ ν•¨μˆ˜ μ’…μ†λ˜λ €λ©΄, Cκ°€ Aλ‚˜ B쀑 ν•˜λ‚˜μ—λ§Œ μ˜μ‘΄ν•΄μ„œλŠ” μ•ˆ 되고, λ°˜λ“œμ‹œ A와 B 전체에 μ˜μ‘΄ν•΄μ•Όν•¨

 

 

제 3μ •κ·œν˜•

 

 

 

 

λ¦΄λ ˆμ΄μ…˜ R이 제 2 μ •κ·œν˜•μ΄κ³  κΈ°λ³Έν‚€κ°€ μ•„λ‹Œ 속성이 기본킀에 비이행적(non-transitive)으둜 쒅속할 λ•Œ (직접 쒅속)

제 3μ •κ·œν˜•μ΄λΌκ³  함!

이행적 μ’…μ†μ΄λž€ A -> B, B -> Cκ°€ 성립할 λ•Œ A -> Cκ°€ μ„±λ¦½λ˜λŠ” ν•¨μˆ˜ 쒅속성 

 

 

BCNF (Boyce-Codd Normal Form)

 

 

 

 

 

 

λ¦΄λ ˆμ΄μ…˜ Rμ—μ„œ ν•¨μˆ˜ 쒅속성 X -> Yκ°€ 성립할 λ•Œ λͺ¨λ“  κ²°μ •μž Xκ°€ 후보킀이면 BCNF μ •κ·œν˜•μ΄λΌκ³  함

 

3.3 무손싀 λΆ„ν•΄

 

λ¦΄λ ˆμ΄μ…˜ R을 λ¦΄λ ˆμ΄μ…˜ R1κ³Ό R2둜 λΆ„ν•΄ν•  λ•Œ R1  β‹ˆ R2 = R이면 무손싀 λΆ„ν•΄(lossless-join decomposition) 라고 함

 

=> R1 ∩ R2 -> R1 ν˜Ήμ€ R1 ∩ R2 -> R2 쀑 ν•˜λ‚˜λ₯Ό λ§Œμ‘±ν•΄μ•Ό 함

 

 

 

[λΆ„ν•΄ 1]의 경우 R1, R2λ₯Ό λ‹€μ‹œ μ‘°μΈν•˜λ©΄ μ›λž˜ λ¦΄λ ˆμ΄μ…˜μ΄ λ˜μ§€λ§Œ

[λΆ„ν•΄ 2]의 경우 λ‹€μ‹œ μ‘°μΈν•˜λ©΄ μ˜λ―Έμ—†λŠ” νˆ¬ν”Œμ΄ 생김!

=> 무손싀 λΆ„ν•΄ 쑰건을 λ§Œμ‘±ν•˜μ§€ λͺ»ν•˜κ³  손싀(loss) λΆ„ν•΄λ˜μ—ˆκΈ° λ•Œλ¬Έ

 

 

 

 

 

3.4 μ •κ·œν™” 정리

 

 

 

λŒ€λΆ€λΆ„μ˜ λ¦΄λ ˆμ΄μ…˜μ€ BCNFκΉŒμ§€ μ •κ·œν™”ν•˜λ©΄ μ‹€μ œμ μΈ μ΄μƒν˜„μƒμ΄ μ—†μ–΄μ§€κΈ° λ•Œλ¬Έμ— 보톡 BCNFκΉŒμ§€ μ •κ·œν™”λ₯Ό 진행함

 

λ°˜μ‘ν˜•