Post

[Databases] μ •κ·œν™”, 1NF, 2NF, 3NF, BCNF, 4NF, 5NF

[Databases] μ •κ·œν™”, 1NF, 2NF, 3NF, BCNF, 4NF, 5NF

πŸ“Œ μ •κ·œν™”λž€?

μ •κ·œν™”(Normalization)λŠ” λ°μ΄ν„°μ˜ 쀑볡을 μ΅œμ†Œν™”ν•˜κ³  무결성을 μ§€ν‚€κΈ° μœ„ν•΄ 데이터λ₯Ό κ΅¬μ‘°ν™”ν•˜λŠ” 방법이닀.

μž₯점

  • 쀑볡 데이터가 쀄어듀기 λ•Œλ¬Έμ— μ €μž₯곡간이 쀄어든닀.
  • λ°μ΄ν„°μ˜ 일관성을 μœ μ§€ν•  수 μžˆλ‹€.

단점

  • μ—¬λŸ¬ ν…Œμ΄λΈ”μ— 데이터가 뢄산될 수 μžˆλ‹€.
  • 데이터 쑰회 μ‹œ 쑰인 연산이 ν•„μš”ν•  수 μžˆλ‹€.

πŸ“Œ 이상 ν˜„μƒ

λ°μ΄ν„°μ˜ 쀑볡 및 뢈일치둜 λ°œμƒν•˜λŠ” 문제λ₯Ό 이상 ν˜„μƒ(Anomaly) 라고 ν•œλ‹€. 이상 ν˜„μƒμ˜ μ’…λ₯˜λŠ” μ‚½μž… 이상, μ‚­μ œ 이상, κ°±μ‹  이상이 μ‘΄μž¬ν•œλ‹€.

idstudent_namelecture_idlecture_name
1James101math
2James103physics
3Chris102english

μœ„μ™€ 같은 초기 ν…Œμ΄λΈ” STU_LEC이 μžˆλ‹€κ³  κ°€μ •ν•˜μž.

μ‚½μž… 이상

μƒˆλ‘œμš΄ 데이터λ₯Ό μ‚½μž…ν•  λ•Œ 정보가 λΆ€μ‘±ν•˜μ—¬ μ‚½μž…μ΄ λΆˆκ°€λŠ₯ν•œ 상황을 λ§ν•œλ‹€. 예λ₯Ό λ“€μ–΄ 아무 κ³Όλͺ©λ„ μˆ˜κ°•ν•˜μ§€ μ•ŠλŠ” 학생이 μžˆλ‹€κ³  κ°€μ •ν•˜μž. STU_LEC에 ν•΄λ‹Ή ν•™μƒμ˜ 정보λ₯Ό μ‚½μž…ν•˜κΈ° μœ„ν•΄μ„œ lecture_id, lecture_name은 null이 λ˜μ–΄μ•Ό ν•œλ‹€.

μ‚­μ œ 이상

νŠΉμ • 데이터λ₯Ό μ‚­μ œν•  λ•Œ μ˜λ„μΉ˜ μ•Šκ²Œ λ‹€λ₯Έ 데이터λ₯Ό μžƒκ²Œ λ˜λŠ” 상황을 λ§ν•œλ‹€. 예λ₯Ό λ“€μ–΄ STU_LECμ—μ„œ student_name이 Chris인 행을 μ‚­μ œν•˜λ©΄ lecture_name이 english인 μ •λ³΄κΉŒμ§€ 같이 μ‚­μ œκ°€ λœλ‹€.

κ°±μ‹  이상

데이터λ₯Ό μˆ˜μ •ν•  λ•Œ λ™μΌν•œ 데이터가 μ—¬λŸ¬ 곳에 μ‘΄μž¬ν•˜μ—¬ λͺ¨λ“  데이터λ₯Ό μΌκ΄€μ„±μžˆκ²Œ μˆ˜μ •ν•˜μ§€ λͺ»ν•˜λŠ” 상황을 λ§ν•œλ‹€. 예λ₯Ό λ“€μ–΄ STU_LECμ—μ„œ idκ°€ 1인 ν–‰μ˜ student_name을 Sarah라고 μˆ˜μ •ν–ˆλ‹€κ³  κ°€μ •ν•˜μž. κ·ΈλŸ¬λ‚˜ idκ°€ 1인 ν–‰κ³Ό 2인 행은 같은 ν•™μƒμ΄λ―€λ‘œ, μ •λ³΄μ˜ λΆˆμΌμΉ˜κ°€ λ°œμƒν•œλ‹€.

λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό 섀계할 λ•Œ, 항상 μ •κ·œν™”λ₯Ό μ μš©ν•˜λŠ” 것은 μ ν•©ν•˜μ§€ μ•Šλ‹€. μ •κ·œν™”κ°€ 닡이 μ•„λ‹ˆλΌλŠ” 것이닀. λΉ„μ¦ˆλ‹ˆμŠ€ μš”κ΅¬μ‚¬ν•­μ„ κ³ λ €ν•˜μ—¬ λΉ„μ •κ·œν™” λ˜ν•œ κ³ λ €ν•΄μ•Ό ν•œλ‹€.

πŸ“Œ μ •κ·œν™” 단계

μ •κ·œν™” λ‹¨κ³„λŠ” 제1 μ •κ·œν™”(1NF), 제2 μ •κ·œν™”(2NF), 제3 μ •κ·œν™”(3NF), Boyce-Codd Normal Form(BCNF), 제4 μ •κ·œν™”(4NF), 제5 μ •κ·œν™”(5NF)κ°€ μ‘΄μž¬ν•œλ‹€. 보톡 μ •κ·œν™”λ₯Ό μˆ˜ν–‰ν•˜λŠ” 경우 BCNFκΉŒμ§€ μ§„ν–‰ν•˜λ©°, κ·Έ μ΄ν›„λ‘œλŠ” μ§„ν–‰ν•˜μ§€ μ•ŠλŠ”λ‹€. κ·Έ μ΄μœ λŠ” μ •κ·œν™”μ˜ 단점이 뢀각될 수 있기 λ•Œλ¬Έμ΄λ‹€.

제1 μ •κ·œν˜•(1NF)

  • λͺ¨λ“  속성이 μ›μžμ μ΄μ–΄μ•Ό ν•œλ‹€.
학생IDν•™μƒμ΄λ¦„μˆ˜μ—…
1ν™κΈΈλ™μˆ˜ν•™, μ˜μ–΄
2κΉ€μ˜ν¬κ³Όν•™
3μ΄μ² μˆ˜μˆ˜ν•™, μŒμ•…

μœ„ ν…Œμ΄λΈ”μ˜ μˆ˜μ—… 속성은 μ—¬λŸ¬ 값을 κ°€μ§€κ³  μžˆλ‹€. λ”°λΌμ„œ μ›μžμ„±μ„ λ§Œμ‘±ν•˜μ§€ μ•ŠλŠ”λ‹€.

학생IDν•™μƒμ΄λ¦„μˆ˜μ—…
1ν™κΈΈλ™μˆ˜ν•™
1ν™κΈΈλ™μ˜μ–΄
2κΉ€μ˜ν¬κ³Όν•™
3μ΄μ² μˆ˜μˆ˜ν•™
3μ΄μ² μˆ˜μŒμ•…

제2 μ •κ·œν˜•(2NF)

  • 1NFλ₯Ό λ§Œμ‘±ν•΄μ•Ό ν•˜λ©° λΆ€λΆ„ 쒅속(partial dependency)κ°€ μ—†μ–΄μ•Ό ν•œλ‹€.
  • κΈ°λ³Έ ν‚€κ°€ μ•„λ‹Œ 속성이 κΈ°λ³Έ ν‚€μ˜ 일뢀에 μ˜μ‘΄ν•˜λŠ” 경우λ₯Ό λΆ€λΆ„ 쒅속이라고 ν•œλ‹€.
학생IDμˆ˜μ—…IDν•™μƒμ΄λ¦„μˆ˜μ—…μ΄λ¦„
1101ν™κΈΈλ™μˆ˜ν•™
1102ν™κΈΈλ™μ˜μ–΄
2103κΉ€μ˜ν¬κ³Όν•™
3101μ΄μ² μˆ˜μˆ˜ν•™
3104μ΄μ² μˆ˜μŒμ•…

μœ„ ν…Œμ΄λΈ”μ€ 1NFλ₯Ό λ§Œμ‘±ν•˜λ©°, κΈ°λ³Έ ν‚€λŠ” (학생ID, μˆ˜μ—…ID)이닀. κ·ΈλŸ¬λ‚˜ 학생이름 속성은 κΈ°λ³Έ ν‚€μ˜ 일뢀 속성은 학생ID에 쒅속적이닀.

학생ID학생이름
1홍길동
2κΉ€μ˜ν¬
3이철수
학생IDμˆ˜μ—…IDμˆ˜μ—…μ΄λ¦„
1101μˆ˜ν•™
1102μ˜μ–΄
2103κ³Όν•™
3101μˆ˜ν•™
3104μŒμ•…

제3 μ •κ·œν˜•(3NF)

  • 2NFλ₯Ό λ§Œμ‘±ν•΄μ•Ό ν•˜λ©° 이행 쒅속(transitive dependency)이 μ—†μ–΄μ•Ό ν•œλ‹€. 즉, κΈ°λ³Έ ν‚€κ°€ μ•„λ‹Œ 속성듀끼리 μ’…μ†λ˜λŠ” ν˜„μƒμ΄ μ—†μ–΄μ•Ό ν•œλ‹€.
  • 속성 Aκ°€ 속성 B에 μ’…μ†λ˜κ³ , 속성 Bκ°€ 속성 C에 μ’…μ†λœλ‹€κ³  ν•  λ•Œ, 속성 CλŠ” 속성 A에 μ΄ν–‰μ μœΌλ‘œ μ’…μ†λœλ‹€. 즉, Aβ†’B이고 Bβ†’C일 λ•Œ, Aβ†’Cλ₯Ό λ§Œμ‘±ν•˜κ²Œ λœλ‹€.
학생IDμˆ˜μ—…IDμˆ˜μ—…μ΄λ¦„
1101μˆ˜ν•™
2102μ˜μ–΄
3103κ³Όν•™
1101μˆ˜ν•™
4104μŒμ•…

μœ„ ν…Œμ΄λΈ”μ˜ κΈ°λ³Έ ν‚€λŠ” 학생ID이닀. μ„±λ¦½ν•˜λŠ” ν•¨μˆ˜μ  쒅속성은 학생IDβ†’μˆ˜μ—…ID, μˆ˜μ—…IDβ†’μˆ˜μ—…μ΄λ¦„μ΄λ‹€. μˆ˜μ—…ID와 μˆ˜μ—…μ΄λ¦„μ€ κΈ°λ³Έ ν‚€κ°€ μ•„λ‹ˆλ―€λ‘œ, 이행 쒅속을 λ§Œμ‘±ν•˜κ³  μžˆλ‹€. 제3 μ •κ·œν™”λ₯Ό μˆ˜ν–‰ν•œ κ²°κ³ΌλŠ” λ‹€μŒκ³Ό κ°™λ‹€.

학생IDμˆ˜μ—…ID
1101
2102
3103
4104
μˆ˜μ—…IDμˆ˜μ—…μ΄λ¦„
101μˆ˜ν•™
102μ˜μ–΄
103κ³Όν•™
104μŒμ•…

Boyce-Codd Normal Form(BCNF)

  • 3NFλ₯Ό λ§Œμ‘±ν•΄μ•Ό ν•˜λ©° λͺ¨λ“  κ²°μ •μž(Determinant)κ°€ 후보 ν‚€ 집합에 속해야 ν•œλ‹€.
  • FD Aβ†’Bμ—μ„œ Aλ₯Ό κ²°μ •μžλΌκ³  ν•œλ‹€.
ν•™μƒλ²ˆν˜Έκ°•μ˜μ΄λ¦„κ΅μˆ˜μ΄λ¦„
1λ°μ΄ν„°λ² μ΄μŠ€κΉ€κ΅μˆ˜
2μ•Œκ³ λ¦¬μ¦˜μ΄κ΅μˆ˜
3μš΄μ˜μ²΄μ œλ°•κ΅μˆ˜
1μ•Œκ³ λ¦¬μ¦˜μ΄κ΅μˆ˜

μœ„ ν…Œμ΄λΈ”μ˜ κΈ°λ³Έ ν‚€λŠ” (ν•™μƒλ²ˆν˜Έ, κ°•μ˜μ΄λ¦„)이며, κ΅μˆ˜μ΄λ¦„β†’κ°•μ˜μ΄λ¦„ ν•¨μˆ˜μ  쒅속성이 μΆ”κ°€μ μœΌλ‘œ μ„±λ¦½ν•œλ‹€. μ—¬κΈ°μ„œ κ²°μ •μžλŠ” κ΅μˆ˜μ΄λ¦„μ΄λ©°, κ΅μˆ˜μ΄λ¦„μ€ 후보 ν‚€ 집합에 μ†ν•˜μ§€ μ•ŠλŠ”λ‹€.

κ΅μˆ˜μ΄λ¦„κ°•μ˜μ΄λ¦„
κΉ€κ΅μˆ˜λ°μ΄ν„°λ² μ΄μŠ€
μ΄κ΅μˆ˜μ•Œκ³ λ¦¬μ¦˜
λ°•κ΅μˆ˜μš΄μ˜μ²΄μ œ
ν•™μƒλ²ˆν˜Έκ΅μˆ˜μ΄λ¦„
1κΉ€κ΅μˆ˜
2이ꡐ수
3λ°•κ΅μˆ˜
1이ꡐ수

제4 μ •κ·œν˜•(4NF)

  • BCNFλ₯Ό λ§Œμ‘±ν•΄μ•Ό ν•˜λ©° λ‹€μΉ˜ 쒅속을 μ œκ±°ν•΄μ•Ό ν•œλ‹€.
  • λ‹€μΉ˜ 쒅속은 Aβ†’Bμ—μ„œ Aκ°€ 단일 κ°’, Bκ°€ 닀쀑 값인 경우λ₯Ό λ§ν•˜λ©°, 이λ₯Ό Aβ† B라고 ν‘œκΈ°ν•œλ‹€.
학생IDκ°•μ˜μ΄λ¦„μ£Όμ†Œ
1λ°μ΄ν„°λ² μ΄μŠ€μ„œμšΈμ‹œ 강남ꡬ
1μ•Œκ³ λ¦¬μ¦˜μ„œμšΈμ‹œ 강남ꡬ
1μš΄μ˜μ²΄μ œμ„œμšΈμ‹œ 강남ꡬ
2λ°μ΄ν„°λ² μ΄μŠ€λΆ€μ‚°μ‹œ ν•΄μš΄λŒ€κ΅¬
2μ•Œκ³ λ¦¬μ¦˜λΆ€μ‚°μ‹œ ν•΄μš΄λŒ€κ΅¬
3μš΄μ˜μ²΄μ œλŒ€κ΅¬μ‹œ 쀑ꡬ

μœ„ ν…Œμ΄λΈ”μ—μ„œ κΈ°λ³Έ ν‚€λŠ” 학생ID이며, 학생IDβ†’κ°•μ˜μ΄λ¦„, 학생IDβ†’μ£Όμ†Œ ν•¨μˆ˜μ  쒅속성을 λ§Œμ‘±ν•œλ‹€. λ‹€μΉ˜ 쒅속성을 λ§Œμ‘±ν•˜λ―€λ‘œ 제 4μ •κ·œν™”λ₯Ό 톡해 ν…Œμ΄λΈ”μ„ λΆ„ν•΄ν•œλ‹€.

학생IDμ£Όμ†Œ
1μ„œμšΈμ‹œ 강남ꡬ
2λΆ€μ‚°μ‹œ ν•΄μš΄λŒ€κ΅¬
3λŒ€κ΅¬μ‹œ 쀑ꡬ
학생IDκ°•μ˜μ΄λ¦„
1λ°μ΄ν„°λ² μ΄μŠ€
1μ•Œκ³ λ¦¬μ¦˜
1운영체제
2λ°μ΄ν„°λ² μ΄μŠ€
2μ•Œκ³ λ¦¬μ¦˜
3운영체제

제5 μ •κ·œν˜•(5NF)

  • Project Join Normal Form(PJNF)이라고도 λΆ€λ₯Έλ‹€.
  • 4NFλ₯Ό λ§Œμ‘±ν•΄μ•Ό ν•˜λ©° 쑰인 쒅속을 μ œκ±°ν•΄μ•Ό ν•œλ‹€.
  • 쑰인 쒅속은 ν•˜λ‚˜μ˜ 관계λ₯Ό λΆ„ν•΄ν•˜κ³ , λ‹€μ‹œ μ‘°μΈν–ˆμ„ λ•Œ 데이터 손싀이 λ°œμƒν•˜κ±°λ‚˜, ν•„μš”μ—†λŠ” 데이터가 μƒκΈ°λŠ” 것이닀.
  • 제5 μ •κ·œν˜•μ„ λ§Œμ‘±ν•˜κΈ° μœ„ν•΄μ„œ ν…Œμ΄λΈ”μ€ 사싀상 2개의 μ†μ„±λ§Œ μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.
This post is licensed under CC BY 4.0 by the author.