Database

[Database] μ •κ·œν™”(Normalization)

quedevel 2023. 3. 26. 14:28
728x90
λ°˜μ‘ν˜•

🎯 μ •κ·œν™”(Normalization)


μ •κ·œν™”(Normalization)λŠ” λ°μ΄ν„°λ² μ΄μŠ€ μ„€κ³„μ—μ„œ 쀑볡 데이터λ₯Ό μ΅œμ†Œν™”ν•˜κ³  데이터 일관성을 μœ μ§€ν•˜κΈ° μœ„ν•΄ 데이터λ₯Ό κ΅¬μ‘°ν™”ν•˜λŠ” κ³Όμ •μž…λ‹ˆλ‹€.

μ •κ·œν™”λŠ” μ—¬λŸ¬ λ‹¨κ³„λ‘œ λ‚˜λˆ μ„œ μ§„ν–‰λ©λ‹ˆλ‹€. 각 λ‹¨κ³„λŠ” 더 높은 μ •κ·œν™” μˆ˜μ€€μ„ μ˜λ―Έν•˜λ©°, 보톡 1NF(First Normal Form), 2NF, 3NF, BCNF(Boyce-Codd Normal Form), 4NF, 5NFκΉŒμ§€ μ§„ν–‰λ©λ‹ˆλ‹€. 이 λ‹¨κ³„λ³„λ‘œ λ°μ΄ν„°λ² μ΄μŠ€ ꡬ쑰λ₯Ό λ³€ν˜•ν•΄λ‚˜κ°€λŠ” 것을 μ •κ·œν™”λΌκ³  ν•©λ‹ˆλ‹€.
μ •κ·œν™”λ₯Ό μˆ˜ν–‰ν•˜λ©΄ 쀑볡 데이터λ₯Ό μ΅œμ†Œν™”ν•  수 μžˆμ–΄ 데이터 μ €μž₯ 곡간을 μ ˆμ•½ν•  수 있고, 데이터 일관성을 μœ μ§€ν•˜λ©° μ‚½μž…, μˆ˜μ •, μ‚­μ œ λ“±μ˜ μž‘μ—…μ„ 보닀 효율적으둜 μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ λ„ˆλ¬΄ λ§Žμ€ μ •κ·œν™”κ°€ 일어날 경우, 쿼리가 λ³΅μž‘ν•΄μ§€κ³  μ„±λŠ₯이 μ €ν•˜λ  수 μžˆμŠ΅λ‹ˆλ‹€.

λ”°λΌμ„œ λ°μ΄ν„°λ² μ΄μŠ€ 섀계 μ‹œμ—λŠ” μ μ ˆν•œ μ •κ·œν™” μˆ˜μ€€μ„ κ²°μ •ν•˜κ³ , μ„±λŠ₯을 κ³ λ €ν•˜μ—¬ 졜적의 ꡬ쑰λ₯Ό 섀계해야 ν•©λ‹ˆλ‹€.

1NF(First Normal Form)


  • ν…Œμ΄λΈ”μ˜ λͺ¨λ“  속성 값이 μ›μž κ°’(Atomic Value)으둜 λ˜μ–΄ μžˆμ–΄μ•Ό ν•œλ‹€.
  • 각각의 속성듀은 λ°˜λ“œμ‹œ ν•˜λ‚˜μ˜ κ°’λ§Œ κ°€μ Έμ•Ό ν•˜λ©°, κ·Έ 값은 λ°˜λ“œμ‹œ λ™μΌν•œ 데이터 ν˜•μ‹μ„ κ°€μ Έμ•Ό ν•œλ‹€.
  • 예λ₯Ό λ“€μ–΄, 학생 ν…Œμ΄λΈ”μ˜ 경우, 학생 이름과 학생 μ „ν™”λ²ˆν˜ΈλŠ” 각각 λ³„λ„μ˜ μ†μ„±μœΌλ‘œ λΆ„λ¦¬λ˜μ–΄ μžˆμ–΄μ•Ό ν•œλ‹€.

2NF(Second Normal Form)


  • 1NF에 μ†ν•˜λŠ” ν…Œμ΄λΈ”μ—μ„œ ν‚€κ°€ μ•„λ‹Œ 속성듀이 κΈ°λ³Έ 킀에 λŒ€ν•΄μ„œ μ™„μ „ ν•¨μˆ˜ 쒅속( Fully Functional Dependency) λ˜μ–΄μ•Ό ν•œλ‹€.
  • κΈ°λ³Έ ν‚€μ˜ 일뢀 μ†μ„±μ—λ§Œ μ’…μ†λœ 볡합 ν‚€κ°€ μžˆλŠ” 경우, 이 볡합 ν‚€λ₯Ό λΆ„λ¦¬ν•˜μ—¬ μƒˆλ‘œμš΄ ν…Œμ΄λΈ”λ‘œ κ΅¬μ„±ν•œλ‹€.
  • 예λ₯Ό λ“€μ–΄, 학생-κ³Όλͺ© ν…Œμ΄λΈ”μ—μ„œ 학생 이름과 κ³Όλͺ© 이름이 κΈ°λ³Έ ν‚€λ₯Ό κ΅¬μ„±ν•˜κ³  μ„±μ λ§Œ λ”°λ‘œ μ €μž₯ν•œλ‹€λ©΄, 성적은 학생과λͺ©μ— λŒ€ν•΄μ„œλ§Œ 쒅속성이 있기 λ•Œλ¬Έμ— 이λ₯Ό λ”°λ‘œ λΆ„λ¦¬ν•˜λŠ” 것이 λ°”λžŒμ§ν•˜λ‹€.

3NF(Third Normal Form)


  • 2NFλ₯Ό λ§Œμ‘±ν•˜λ©΄μ„œ, ν…Œμ΄λΈ” λ‚΄μ—μ„œ λ‹€λ₯Έ 속성을 톡해 κ°„μ ‘μ μœΌλ‘œ κ²°μ •λ˜μ§€ μ•ŠλŠ” 속성이 μ‘΄μž¬ν•΄μ•Ό ν•œλ‹€.
  • 이λ₯Ό μœ„ν•΄ ν•œ ν…Œμ΄λΈ”μ— λ‹€λ₯Έ 속성에 쒅속적인 속성이 μžˆλ‹€λ©΄, 이λ₯Ό λ³„λ„μ˜ ν…Œμ΄λΈ”λ‘œ λΆ„λ¦¬ν•˜μ—¬ κ΄€λ¦¬ν•œλ‹€.
  • 예λ₯Ό λ“€μ–΄, μ£Όλ¬Έ ν…Œμ΄λΈ”μ—μ„œ 고객 이름 λŒ€μ‹  고객 번호λ₯Ό μ‚¬μš©ν•˜μ—¬ μ£Όλ¬Έ 내역을 κ΄€λ¦¬ν•˜λŠ” 경우, 고객 λ²ˆν˜Έμ™€ 고객 이름은 λ‹€λ₯Έ ν…Œμ΄λΈ”μ—μ„œ λ³„λ„λ‘œ κ΄€λ¦¬ν•˜κ²Œ λœλ‹€.

λΉ„μ •κ·œν™”


λΉ„μ •κ·œν™”λŠ” λ°μ΄ν„°λ² μ΄μŠ€ μ„€κ³„μ˜ μΌν™˜μœΌλ‘œ 데이터 λͺ¨λΈμ˜ μ„±λŠ₯을 ν–₯μƒμ‹œν‚€κΈ° μœ„ν•΄ μ •κ·œν™”λœ 데이터 λͺ¨λΈμ—μ„œ 일뢀 λ˜λŠ” 전체λ₯Ό μ •κ·œν™” κ·œμΉ™μ—μ„œ λ²—μ–΄λ‚˜κ²Œ λ§Œλ“œλŠ” 과정을 μ˜λ―Έν•©λ‹ˆλ‹€. 즉, μ •κ·œν™”λ₯Ό 톡해 λΆ„ν•΄λœ ν…Œμ΄λΈ”μ„ λ‹€μ‹œ ν•©μΉ˜λŠ” 것을 λ§ν•©λ‹ˆλ‹€.

λΉ„μ •κ·œν™”λŠ” 데이터 쑰회 μ‹œ μ„±λŠ₯을 ν–₯μƒμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, JOIN 연산이 λ§Žμ€ μΏΌλ¦¬μ—μ„œλŠ” λΉ„μ •κ·œν™”λœ 데이터 λͺ¨λΈμ΄ 더 λΉ λ₯Έ μ„±λŠ₯을 λ³΄μ΄λŠ” κ²½μš°κ°€ μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ, μ •κ·œν™”λ₯Ό 반볡적으둜 μˆ˜ν–‰ν•˜λ©΄ ν…Œμ΄λΈ”μ΄ λΆ„ν•΄λ˜μ–΄ κ²°κ΅­ μ„±λŠ₯이 μ €ν•˜λ  수 μžˆμŠ΅λ‹ˆλ‹€.

ν•˜μ§€λ§Œ, λΉ„μ •κ·œν™”λŠ” 데이터 일관성에 영ν–₯을 λ―ΈμΉ  수 μžˆμŠ΅λ‹ˆλ‹€. 데이터가 μ€‘λ³΅λ˜μ–΄ μ €μž₯되기 λ•Œλ¬Έμ— 데이터 일관성을 μœ μ§€ν•˜κΈ° μœ„ν•΄ 더 λ§Žμ€ 관리가 ν•„μš”ν•©λ‹ˆλ‹€. λ˜ν•œ, 데이터 μˆ˜μ • μ‹œ μ—¬λŸ¬ ν…Œμ΄λΈ”μ„ μˆ˜μ •ν•΄μ•Ό ν•  μˆ˜λ„ 있기 λ•Œλ¬Έμ— 관리가 더 μ–΄λ ΅μŠ΅λ‹ˆλ‹€.

λ”°λΌμ„œ, λΉ„μ •κ·œν™”λŠ” μ„±λŠ₯ ν–₯상을 μœ„ν•΄ μ‚¬μš©λ˜λŠ” κΈ°λ²•μ΄μ§€λ§Œ, ν•„μš”ν•œ κ²½μš°μ—λ§Œ μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€. λΉ„μ •κ·œν™”λŠ” μ •κ·œν™”λœ 데이터 λͺ¨λΈμ—μ„œ 일뢀 λ˜λŠ” 전체λ₯Ό λ²—μ–΄λ‚˜κ²Œ λ§Œλ“œλŠ” 것이기 λ•Œλ¬Έμ—, 데이터 λͺ¨λΈμ˜ 일관성과 μœ μ§€λ³΄μˆ˜μ„±μ„ μœ μ§€ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ‹ μ€‘ν•˜κ²Œ κ³ λ €ν•΄μ•Ό ν•©λ‹ˆλ‹€.

728x90
λ°˜μ‘ν˜•

'Database' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[Database] 인덱슀(Index)  (0) 2023.03.26
[Database] 이상(Anomaly)  (0) 2023.03.26
[Database] SQL vs NoSQL  (0) 2023.03.26
[Database] SQL Injection  (0) 2023.03.25
[Database] JOIN  (0) 2023.03.25