λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ’‘CS/Database

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

by hyeon-z 2023. 6. 16.

 

μ •κ·œν™”λž€?

 

Attribute κ°„μ˜ μ’…μ†μ„±μœΌλ‘œ μΈν•œ μ΄μƒν˜„상이 λ°œμƒν•˜λŠ” λ¦΄λ ˆμ΄μ…˜μ„ λΆ„ν•΄ν•˜μ—¬ μž¬λ””μžμΈν•¨μœΌλ‘œμ¨ μ΄μƒν˜„μƒμ„ μ—†μ• λŠ” κ³Όμ •

λ°μ΄ν„°μ˜ 쀑볡 λ°©μ§€, 무결성을 μΆ©μ‘±ν•˜κΈ° μœ„ν•΄ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ„€κ³„ν•˜λŠ” 방법


μ •κ·œν™”κ°€ μƒκ²¨λ‚œ λ°°κ²½

 

ν•œ λ¦΄λ ˆμ΄μ…˜(Relation)에 μ—¬λŸ¬ μ—”ν‹°ν‹°μ˜ 속성을 ν˜Όν•©ν•˜λ©΄ 정보가 μ€‘볡 μ €μž₯되며 μ €μž₯ 곡간을 λ‚­λΉ„ν•˜κ²Œ λœλ‹€.

또 μ€‘λ³΅λœ μ •λ³΄λ‘œ 인해 '이상 ν˜„μƒ'이 λ°œμƒν•˜κ²Œ λœλ‹€. μ΄λŸ¬ν•œ 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ μ •κ·œν™” 과정을 κ±°μΉ˜λŠ” 것이닀. 


μ •κ·œν™”μ˜ 3κ°€μ§€ 원칙

 

- μ •λ³΄μ˜ 무손싀 : λΆ„ν•΄λœ λ¦΄λ ˆμ΄μ…˜μ΄ ν‘œν˜„ν•˜λŠ” μ •λ³΄λŠ” λΆ„ν•΄λ˜κΈ° μ „μ˜ 정보λ₯Ό λͺ¨λ‘ 포함해야 ν•œλ‹€.

- μ΅œμ†Œ 데이터 쀑볡 : 이상 ν˜„μƒμ„ 제거, 데이터 쀑볡을 μ΅œμ†Œν™”

- λΆ„λ¦¬μ˜ 원칙 : ν•˜λ‚˜μ˜ λ…λ¦½λœ 관계성은 ν•˜λ‚˜μ˜ λ…λ¦½λœ λ¦΄λ ˆμ΄μ…˜μœΌλ‘œ λΆ„λ¦¬ν•΄μ„œ ν‘œν˜„

 


μ •κ·œν™”μ˜ μž₯단점

 

μž₯점

-  μ€‘λ³΅λœ 데이터λ₯Ό μ΅œμ†Œν™”ν•˜μ—¬ λ°μ΄ν„°μ˜ 일관성과 정확성을 ν–₯μƒμ‹œν‚¨λ‹€. => μš©λŸ‰ 쀄이기

-  λ°μ΄ν„° μ‘°μž‘μ— νš¨μœ¨μ μ΄λ‹€. λ°μ΄ν„°μ˜ μ‚½μž…, κ°±μ‹ , μ‚­μ œ, 쑰회 λ“±μ˜ μž‘μ—…μ΄ λ‹¨μˆœν™”λ˜κ³  λ³΅μž‘ν•œ 쑰인 연산을 μ΅œμ†Œν™”ν•  수 μžˆλ‹€.

- λ¦΄λ ˆμ΄μ…˜μ—μ„œ λ°œμƒν•˜λŠ” μ΄μƒν˜„μƒμ„ ν•΄κ²°ν•œλ‹€.

 

단점

λ¦΄λ ˆμ΄μ…˜μ˜ λΆ„ν•΄λ‘œ 인해 λ¦΄λ ˆμ΄μ…˜κ°„μ˜ 연산이 λ§Žμ•„μ Έ 응닡 μ‹œκ°„μ΄ 였히렀 느렀질 μˆ˜λ„ μžˆλ‹€.

 

μ΄λŸ¬ν•œ 경우 λ°˜μ •κ·œν™”(De-normalization)을 ν†΅ν•΄μ„œ μ„±λŠ₯을 ν–₯μƒμ‹œν‚¬ 수 μžˆλ‹€.

* λ°˜μ •κ·œν™”:  λ°μ΄ν„°λ² μ΄μŠ€μ˜ μ„±λŠ₯을 ν–₯μƒμ‹œν‚€κ±°λ‚˜ μΏΌλ¦¬μ˜ κ°„결성을 μœ„ν•΄ μ •κ·œν™”λœ λ°μ΄ν„° λͺ¨λΈμ—μ„œ μΌλΆ€ μ •κ·œν™” κ·œμΉ™μ„ λ¬΄μ‹œν•˜κ±°λ‚˜ μ‘°μ •ν•˜λŠ” κ³Όμ •


μ •κ·œν™” 단계

제 1μ •κ·œν™” (1NF)

 

ν…Œμ΄λΈ”μ˜ 컬럼이 μ›μžκ°’(Atomic Value, ν•˜λ‚˜μ˜ κ°’)을 갖도둝 ν…Œμ΄λΈ”μ„ λΆ„ν•΄ν•˜λŠ” 것.

 

ꡐ수λͺ… λ‹΄λ‹Ή κ³Όλͺ©
λ°•κ΅μˆ˜ μ‚¬νšŒ
이ꡐ수 κ΅­μ–΄
κΉ€κ΅μˆ˜ μŒμ•…, 체윑
졜ꡐ수 μˆ˜ν•™

ν•΄λ‹Ή ν…Œμ΄λΈ”μ—μ„œ κΉ€κ΅μˆ˜μ˜ λ‹΄λ‹Ή κ³Όλͺ©μ€ μŒμ•…κ³Ό μ²΄μœ‘μ΄λ‹€.

ν…Œμ΄λΈ”μ˜ 컬럼(λ‹΄λ‹Ή κ³Όλͺ©)이 μ—¬λŸ¬ 개의 값을 κ°€μ§€κ³  μžˆμœΌλ―€λ‘œ 제1 μ •κ·œν˜•μ— μœ„λ°°λœλ‹€.

 

β­•μ œ1 μ •κ·œν™”λ₯Ό λ§Œμ‘±ν•˜λŠ” ν…Œμ΄λΈ”

ꡐ수λͺ… λ‹΄λ‹Ή κ³Όλͺ©
λ°•κ΅μˆ˜ μ‚¬νšŒ
이ꡐ수 κ΅­μ–΄
κΉ€κ΅μˆ˜ μŒμ•…
κΉ€κ΅μˆ˜ 체윑
졜ꡐ수 μˆ˜ν•™

κΉ€κ΅μˆ˜μ˜ λ‹΄λ‹Ή κ³Όλͺ©μ„ λΆ„λ¦¬ν•˜μ—¬ 제1 μ •κ·œν™”λ₯Ό λ§Œμ‘±μ‹œν‚¨λ‹€.

 

제2 μ •κ·œν™” (2NF)

 

제1 μ •κ·œν™”λ₯Ό μ§„ν–‰ν•œ ν…Œμ΄λΈ”μ— λŒ€ν•΄ μ™„μ „ ν•¨μˆ˜ 쒅속을 λ§Œμ‘±ν•˜λ„λ‘ ν…Œμ΄λΈ”μ„ λΆ„ν•΄ν•˜λŠ” 것 (λΆ€λΆ„ ν•¨μˆ˜ 쒅속성 제거)

 

πŸ€”μ™„μ „ ν•¨μˆ˜ μ’…μ†μ΄λž€?

κΈ°λ³Έν‚€μ˜ λΆ€λΆ„ 집합이 κ²°μ •μžκ°€ λ˜μ–΄μ„  μ•ˆλœλ‹€λŠ” 것

 

(κ³Όλͺ©κ³Ό μ§€λ„κ΅μˆ˜λŠ” μΌλŒ€μΌ 관계이닀)

ν•™λ²ˆ κ°•μ˜ 지도 ꡐ수 성적
B810 λ°μ΄ν„°λ² μ΄μŠ€ 이ꡐ수 4.0
B710 λ°μ΄ν„°λ² μ΄μŠ€ 이ꡐ수 3.5
B610 자료ꡬ쑰 λ°•κ΅μˆ˜ 3.5
B810 운영체제 졜ꡐ수 3.8

μœ„μ˜ ν…Œμ΄λΈ”μ˜ κΈ°λ³Έν‚€λŠ” (ν•™λ²ˆ, κ°•μ˜)은 성적을 κ²°μ •ν•˜κ³  μžˆλŠ” λ³΅ν•©ν‚€μ΄λ‹€.

ν•˜μ§€λ§Œ μ—¬κΈ°μ„œ μ§€λ„κ΅μˆ˜λŠ” κ°•μ˜μ— μ˜ν•΄ κ²°μ •λœλ‹€.

κΈ°λ³Έν‚€(ν•™λ²ˆ, κ°•μ˜)의 뢀뢄킀인 κ°•μ˜κ°€ 지도 ꡐ수λ₯Ό κ²°μ •ν•˜λŠ” κ²°μ •μžμ΄λ―€λ‘œ 제2 μ •κ·œν˜•μ— μœ„λ°°λœλ‹€.

 

β­•μ œ2 μ •κ·œν™”λ₯Ό λ§Œμ‘±ν•˜λŠ” ν…Œμ΄λΈ”

ν•™λ²ˆ κ°•μ˜ 성적
B810 λ°μ΄ν„°λ² μ΄μŠ€ 4.0
B710 λ°μ΄ν„°λ² μ΄μŠ€ 3.5
B610 자료ꡬ쑰 3.5
B810 운영체제 3.8

 

 

κ°•μ˜ 지도 ꡐ수
λ°μ΄ν„°λ² μ΄μŠ€ 이ꡐ수
λ°μ΄ν„°λ² μ΄μŠ€ 이ꡐ수
자료ꡬ쑰 λ°•κ΅μˆ˜
운영체제 졜ꡐ수

 

제3 μ •κ·œν™”(3NF)

 

제2 μ •κ·œν™”λ₯Ό μ§„ν–‰ν•œ ν…Œμ΄λΈ”μ— λŒ€ν•΄ 이행적 쒅속을 없애도둝 ν…Œμ΄λΈ”을 λΆ„ν•΄ν•˜λŠ” 것

 

πŸ€”μ΄ν–‰μ  ν•¨μˆ˜ μ’…μ†μ΄λž€?

A -> B, B -> Cκ°€ 성립할  λ•Œ A -> Cκ°€ μ„±λ¦½λ˜λŠ” 것

 

고객 ID λ“±κΈ‰ ν• μΈμœ¨
101 VIP 50%
201 GOLD 30%
301 SILVER 20%

고객 IDλ₯Ό ν†΅ν•΄μ„œ 등급을 μ•Œ 수 있고 등급을 ν†΅ν•΄μ„œ ν• μΈμœ¨μ„ μ•Œ 수 μžˆλ‹€.

λ”°λΌμ„œ 고객 IDλ₯Ό ν†΅ν•΄μ„œ ν• μΈμœ¨μ„ μ•Œ 수 μžˆλ‹€.

 

 

β­•μ œ3 μ •κ·œν™”λ₯Ό λ§Œμ‘±ν•˜λŠ” ν…Œμ΄λΈ”

 

고객 ID λ“±κΈ‰
101 VIP
201 GOLD
301 SILVER

 

λ“±κΈ‰ ν• μΈμœ¨
VIP 50%
GOLD 30%
SILVER 20%

 

 

BCNF (Boyce-Codd Normal Form)

 

제3 μ •κ·œν™”λ₯Ό μ§„ν–‰ν•œ ν…Œμ΄λΈ”μ— λŒ€ν•΄ λͺ¨λ“  κ²°μ •μžκ°€ 후보킀가 λ˜λ„λ‘ ν…Œμ΄λΈ”μ„ λΆ„ν•΄ν•˜λŠ” 것

 

(κ΅μˆ˜λŠ” ν•œ κ°•μ˜λ§Œ 맑을 수 있고 λ‹€λ₯Έ κ΅μˆ˜μ™€μ˜ κ°•μ˜ 쀑볡은 ν—ˆμš©ν•œλ‹€.)

ν•™λ²ˆ κ°•μ˜ 지도 ꡐ수
B810 자료ꡬ쑰 λ°•κ΅μˆ˜
B710 μ•ˆλ“œλ‘œμ΄λ“œ 개발 κΉ€κ΅μˆ˜
B610 자료ꡬ쑰 졜ꡐ수
B810 μ•ˆλ“œλ‘œμ΄λ“œ 개발 κΉ€κ΅μˆ˜

ν•΄λ‹Ή ν…Œμ΄λΈ”μ„ μ‚΄νŽ΄λ³΄λ©΄ κΈ°λ³Έν‚€λŠ” (ν•™λ²ˆ, κ°•μ˜)이닀.

학생은 같은 μ΄λ¦„μ˜ κ°•μ˜λ₯Ό μ—¬λŸ¬ 번 듀을 수 μ—†κΈ° λ•Œλ¬Έμ— ν•™λ²ˆκ³Ό κ°•μ˜κ°€ μ‚¬μš© μ–Έμ–΄λ₯Ό κ²°μ •ν•œλ‹€.

지도 κ΅μˆ˜λŠ” μ˜€λ‘œμ§€ ν•œ κ°•μ˜λ§Œ 맑을 수 μžˆμœΌλ―€λ‘œ μ§€λ„ κ΅μˆ˜κ°€ κ°•μ˜λ₯Ό κ²°μ •ν•œλ‹€.

 

지도 κ΅μˆ˜κ°€ κ°•μ˜λ₯Ό κ²°μ •ν•˜λŠ” κ²°μ •μžμ΄μ§€λ§Œ ν›„λ³΄ν‚€λŠ” μ•„λ‹ˆλ‹€. (쀑볡 κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έ)

 

β­•BCNF μ •κ·œν™”λ₯Ό λ§Œμ‘±ν•˜λŠ” ν…Œμ΄λΈ”

 

ν•™λ²ˆ 지도 ꡐ수
B810 λ°•κ΅μˆ˜
B710 κΉ€κ΅μˆ˜
B610 졜ꡐ수
B810 κΉ€κ΅μˆ˜

 

지도 ꡐ수 κ°•μ˜
λ°•κ΅μˆ˜ 자료ꡬ쑰
κΉ€κ΅μˆ˜ μ•ˆλ“œλ‘œμ΄λ“œ 개발
졜ꡐ수 자료ꡬ쑰
κΉ€κ΅μˆ˜ μ•ˆλ“œλ‘œμ΄λ“œ 개발

 


ν•¨μˆ˜ 쒅속성 (Functional Dependency)

 

ν•¨μˆ˜ μ’…μ†μ„±μ΄λž€?

 

μ–΄λ–€ 속성 A의 값을 μ•Œλ©΄ λ‹€λ₯Έ 속성 B의 값이 μœ μΌν•˜κ²Œ μ •ν•΄μ§€λŠ” 관계

 

πŸ’‘ν‘œκΈ°λ°©λ²•

A -> B

 

AλŠ” Bλ₯Ό κ²°μ •ν•œλ‹€. (B의 κ²°μ •μž)

BλŠ” A에 μ’…μ†λœλ‹€. (A의 μ’…μ†μž)

 

ν•¨μˆ˜ μ’…μ†μ„±μ˜ μ’…λ₯˜

 

- μ™„μ „ ν•¨μˆ˜ 쒅속: κΈ°λ³Έν‚€λ₯Ό κ΅¬μ„±ν•˜λŠ” λͺ¨λ“  속성에 μ’…μ†λ˜λŠ” 경우

- λΆ€λΆ„ ν•¨μˆ˜ 쒅속: κΈ°λ³Έν‚€λ₯Ό κ΅¬μ„±ν•˜λŠ” μ†μ„±μ˜ 일뢀에 μ’…μ†λ˜κ±°λ‚˜, κΈ°λ³Έν‚€κ°€ μ•„λ‹Œ λ‹€λ₯Έ 속성에 μ’…μ†λ˜λŠ” 경우

- 이행적 ν•¨μˆ˜ 쒅속: A, B, C μ„Έ 속성이 있고, A -> B, B -> C 쒅속 관계가 μžˆμ„ λ•Œ, A -> Cκ°€ μ„±λ¦½ν•˜λŠ” 경우

 

 

 

Reference

[Database] μ •κ·œν™”(Normalization) μ‰½κ²Œ μ΄ν•΄ν•˜κΈ°

[DB] μ •κ·œν™”(Normalization)λž€? μ •κ·œν™” μ˜ˆμ‹œ, 1NF, 2NF, 3NF, BCNF

[DB] 7. μ •κ·œν™” & ν•¨μˆ˜ 쒅속성 & μ΄μƒν˜„μƒ

'πŸ’‘CS > Database' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[Database] 인덱슀 (Index)  (0) 2023.06.16
[Database] νŠΈλžœμ μ…˜ (Transaction)  (0) 2023.06.16
컀λ„₯μ…˜ ν’€(Connection Pool)μ΄λž€?  (0) 2023.04.05

λŒ“κΈ€