Skip to content

Latest commit

Β 

History

History
20 lines (14 loc) Β· 2.59 KB

03_Normalization.md

File metadata and controls

20 lines (14 loc) Β· 2.59 KB

Normalization (μ •κ·œν™”)

λ°μ΄ν„°λ² μ΄μŠ€ μ΄μƒν˜„μƒμ΄ 무엇인지 μ„€λͺ…ν•΄λ³΄μ„Έμš”.

  • 데이터 μ΄μƒν˜„μƒμ€ λ°μ΄ν„°λ² μ΄μŠ€ λ‚΄λΆ€μ—μ„œ λ°œμƒλ˜λŠ” 뢈일치 ν˜„μƒμ„ λ§ν•©λ‹ˆλ‹€. 데이터 μ΄μƒν˜„μƒμ—λŠ” 3 가지 μ’…λ₯˜κ°€ μžˆμŠ΅λ‹ˆλ‹€.
  • κ°±μ‹  이상은 μ–΄λ–€ 데이터λ₯Ό μ—…λ°μ΄νŠΈν•  λ•Œ λ°μ΄ν„°λ² μ΄μŠ€ 내뢀에 μ€‘λ³΅λœ 데이터 쀑 μΌλΆ€λ§Œ κ°±μ‹ ν•˜μ—¬ 데이터가 뢈일치 λ˜λŠ” λ¬Έμ œμž…λ‹ˆλ‹€.
  • μ‚½μž… 이상은 ν…Œμ΄λΈ”μ— μƒˆλ‘œμš΄ νŠœν”Œμ„ μ‚½μž…ν•  λ•Œ, νŠΉμ • 속성에 λŒ€ν•œ ν•„λ“œ 값이 μ‘΄μž¬ν•˜μ§€ μ•Šμ•„ λΆˆν•„μš”ν•œ NULL 값을 μ‚½μž…ν•˜κ²Œ λ˜λŠ” λ¬Έμ œμž…λ‹ˆλ‹€.
  • μ‚­μ œ 이상은 ν…Œμ΄λΈ”μ—μ„œ μ–΄λ–€ 속성값을 μ‚­μ œν•˜κ³  싢을 λ•Œ, νŠœν”Œ 전체λ₯Ό μ‚­μ œν•˜λ©΄μ„œ λ°œμƒν•˜λŠ” λ¬Έμ œμž…λ‹ˆλ‹€.

λ°μ΄ν„°λ² μ΄μŠ€ μ •κ·œν™” 방법에 λŒ€ν•΄μ„œ μ„€λͺ…ν•΄λ³΄μ„Έμš”.

  • λ°μ΄ν„°λ² μ΄μŠ€ μ΄μƒν˜„μƒμ„ λ°©μ§€ν•˜κΈ° μœ„ν•΄ λ°μ΄ν„°μ˜ 쀑볡을 μ—†μ• λŠ” λͺ©μ μœΌλ‘œ μ •κ·œν™”λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. μ •κ·œν™”λŠ” 1NF λΆ€ν„° 6NF, 그리고 BCNF κ°€ μžˆμŠ΅λ‹ˆλ‹€.
  • 1NF λŠ” ν…Œμ΄λΈ”μ˜ λͺ¨λ“  속성이 μ›μžμ μΈ 값을 μ§€λ‹ˆκ²Œ ν•©λ‹ˆλ‹€.
  • 2NF λŠ” 1NFλ₯Ό λ§Œμ‘±ν•˜λ©° ν…Œμ΄λΈ”μ˜ λͺ¨λ“  속성이 기본킀에 λŒ€ν•΄ μ™„μ „ ν•¨μˆ˜μ  쒅속을 λ§Œμ‘±ν•΄μ•Όν•©λ‹ˆλ‹€. μ™„μ „ ν•¨μˆ˜μ  μ’…μ†μ΄λž€ κΈ°λ³Έν‚€λ₯Ό κ΅¬μ„±ν•˜λŠ” λͺ¨λ“  속성을 μ‚¬μš©ν•΄μ•Ό νŠœν”Œμ„ νŠΉμ •ν•  수 μžˆλŠ” 것을 λ§ν•©λ‹ˆλ‹€. κΈ°λ³Έν‚€μ˜ 일뢀 μ†μ„±λ§Œ μ‚¬μš©ν•΄μ„œ νŠœν”Œμ„ νŠΉμ •ν•  수 μžˆλ‹€λ©΄, 2NF에 μœ„λ°°λ©λ‹ˆλ‹€.
  • 3NF λŠ” 2NFλ₯Ό λ§Œμ‘±ν•˜λ©° 기본킀에 μ†ν•˜μ§€ μ•ŠλŠ” 속성이 이행적 ν•¨μˆ˜ 쒅속을 가지지 μ•Šμ•„μ•Όν•©λ‹ˆλ‹€. 이행적 ν•¨μˆ˜μ’…μ†μ€ μ–΄λ–€ 속성 X둜 속성 Yλ₯Ό νŠΉμ •ν•  수 μžˆμ„ λ•Œ Y둜 Z 속성을 νŠΉμ •ν•  수 μžˆμ–΄ Xκ°€ Zλ₯Ό νŠΉμ •ν•  수 μžˆλŠ” 상황을 λ§ν•©λ‹ˆλ‹€. μ΄λ•ŒλŠ” X, Y 둜 κ΅¬μ„±λœ ν…Œμ΄λΈ”κ³Ό Y, Z 둜 κ΅¬μ„±λœ ν…Œμ΄λΈ”λ‘œ λΆ„λ¦¬ν•˜μ—¬ 3NFλ₯Ό λ§Œμ‘±μ‹œν‚΅λ‹ˆλ‹€.
  • BCNF λŠ” ν…Œμ΄λΈ”μ— μ‘΄μž¬ν•˜λŠ” λͺ¨λ“  κ²°μ •μžκ°€ 후보킀가 되게 λ§Œλ“€μ–΄μ•Όν•©λ‹ˆλ‹€. λ§Œμ•½ 후보킀가 될 수 μ—†λ‹€λ©΄ ν•΄λ‹Ή κ²°μ •μžμ™€ κ·Έ κ²°μ •μžμ™€ 쒅속관계에 μžˆλŠ” 속성을 λ”°λ‘œ λΆ„λ¦¬ν•΄μ£ΌλŠ” κ²ƒμœΌλ‘œ BCNF μ •κ·œν™”λ₯Ό λ§Œμ‘±μ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

μ •κ·œν™”κ°€ λ°˜λ“œμ‹œ ν•„μš”ν•˜λ‹€κ³  μƒκ°ν•΄μš”?

  • μ •κ·œν™”λŠ” 데이터 μ΄μƒν˜„μƒμ„ λ°©μ§€ν•˜μ§€λ§Œ ν…Œμ΄λΈ”μ„ μ—¬λŸ¬κ°œλ‘œ λ‚˜λˆ„κ²Œ λ˜λ―€λ‘œ 이후에 JOIN 연산을 많이 λ°œμƒκΈ°μΌœ μ„±λŠ₯μ €ν•˜μ˜ 원인이 될 수 μžˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ ν…Œμ΄λΈ” μ‚¬μš©μ‹œμ— μ„±λŠ₯μ €ν•˜κ°€ μ˜ˆμƒλ˜λŠ” ν…Œμ΄λΈ”μ€ μ˜λ„μ μœΌλ‘œ μ •κ·œν™”λ₯Ό μ μš©ν•˜μ§€ μ•ŠλŠ” λ°˜μ •κ·œν™”λ₯Ό μ‚¬μš©ν•˜κΈ°λ„ ν•©λ‹ˆλ‹€.