관리 메뉴

BUILD_SSO

[Database/λ°μ΄ν„°λ² μ΄μŠ€] μ •κ·œν™” Normalization λ³Έλ¬Έ

Tech Interview

[Database/λ°μ΄ν„°λ² μ΄μŠ€] μ •κ·œν™” Normalization

sohyeonnn 2023. 5. 3. 15:29

πŸ‘‰πŸ»μ •κ·œν™”λŠ” μ–΄λ–€ λ°°κ²½μ—μ„œ μƒκ²¨λ‚¬λŠ”κ°€?

  • ν•œ λ¦΄λ ˆμ΄μ…˜μ— μ—¬λŸ¬ μ—”ν‹°ν‹°μ˜ 속성을 ν˜Όν•©ν•˜λ©΄ 정보가 쀑볡 μ €μž₯λ˜μ–΄ μ €μž₯곡간을 λ‚­λΉ„ν•˜κ²Œ 되며 μ€‘λ³΅λœ μ •λ³΄λ‘œ 인해 '이상 ν˜„μƒ'이 λ°œμƒν•˜κ²Œ λ˜λŠ”λ°, μ΄λŸ¬ν•œ 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ μ •κ·œν™” 과정이 생겨났닀.

πŸ‘‰πŸ»μ •κ·œν™” normalization에 λŒ€ν•΄ μ„€λͺ…ν•΄μ£Όμ„Έμš”

  • μ •κ·œν™”λž€, ν•˜λ‚˜μ˜ λ¦΄λ ˆμ΄μ…˜μ— ν•˜λ‚˜μ˜ 의미만 갖도둝 λ¦΄λ ˆμ΄μ…˜μ„ λΆ„λ¦¬ν•˜λŠ” 과정을 λœ»ν•©λ‹ˆλ‹€.     
  • λ°μ΄ν„°μ˜ 일관성, μ΅œμ†Œν•œμ˜ 데이터 쀑볡, μ΅œλŒ€ν•œμ˜ 데이터 μœ μ—°μ„±μ„ μœ„ν•œ λ°©λ²•μž…λ‹ˆλ‹€.

πŸ‘‰πŸ»μ •κ·œν™”μ˜ μž₯단점을 μ„€λͺ…ν•΄μ£Όμ„Έμš”

μž₯점

  • λ°μ΄ν„°λ² μ΄μŠ€ λ³€κ²½μ‹œ μ΄μƒν˜„μƒμ΄ λ°œμƒν•˜λŠ” λ¬Έμ œμ μ„ ν•΄κ²°ν•  수 μžˆλ‹€.
  • λ°μ΄ν„°λ² μ΄μŠ€ ꡬ쑰 ν™•μž₯μ‹œ μ •κ·œν™”λœ λ°μ΄ν„°λ² μ΄μŠ€λŠ” κ·Έ ꡬ쑰λ₯Ό λ³€κ²½ν•˜μ§€ μ•Šμ•„λ„ λ˜κ±°λ‚˜ μΌλΆ€λ§Œ λ³€κ²½ν•˜λ©΄ λœλ‹€.

단점

  • λ¦΄λ ˆμ΄μ…˜ λΆ„ν•΄λ‘œ 인해 λ¦΄λ ˆμ΄μ…˜κ°„μ˜ μ—°μ‚°(joinμ—°μ‚°)이 λ§Žμ•„μ§„λ‹€.
    ➑ μ΄λ‘œμΈν•΄ μ§ˆμ˜μ— λŒ€ν•œ μ‘λ‹΅μ‹œκ°„μ΄ 였래걸릴 수 μžˆλ‹€.
    + μ •κ·œν™”λ₯Ό μˆ˜ν–‰ν•œλ‹€λŠ” 것은 μ΄μƒν˜„μƒμ„ μ œκ±°ν•˜λŠ” 것이닀. λ°μ΄ν„°μ˜ 쀑볡 속성을 μ œκ±°ν•˜κ³  κ²°μ •μžμ— μ˜ν•΄ λ™μΌν•œ 의미의 일반 속성이 ν•˜λ‚˜μ˜ ν…Œμ΄λΈ”λ‘œ μ§‘μ•½λ˜λ―€λ‘œ ν•œ ν…Œμ΄λΈ”μ˜ 데이터 μš©λŸ‰μ΄ μ΅œμ†Œν™”λ˜λŠ” νš¨κ³Όκ°€ μžˆλ‹€. λ”°λΌμ„œ μ •κ·œν™”λœ ν…Œμ΄λΈ”μ€ 데이터λ₯Ό μ²˜λ¦¬ν•  λ•Œ 속도가 빨라질 μˆ˜λ„ 있고 느렀질 μˆ˜λ„ μžˆλŠ” νŠΉμ„±μ΄ μžˆλ‹€.

πŸ‘‰πŸ»μ΄μƒν˜„μƒ Anomalyκ³Ό μ’…λ₯˜, νŠΉμ„±μ— λŒ€ν•΄ μ„€λͺ…ν•΄μ£Όμ„Έμš”

  • μ΄μƒν˜„μƒμ΄λž€, ν…Œμ΄λΈ”μ„ μ„€κ³„ν• λ•Œ 잘λͺ» μ„€κ³„ν•˜μ—¬ 데이터λ₯Ό μ‚½μž… μ‚­μ œ μˆ˜μ •ν•  λ•Œ μƒκΈ°λŠ” 논리적 였λ₯˜μž…λ‹ˆλ‹€.
    → μ΄λŸ¬ν•œ 이상 ν˜„μƒμ„ μ˜ˆλ°©ν•˜κ³  효과적인 연산을 ν•˜κΈ° μœ„ν•΄ 데이터 μ •κ·œν™”λ₯Ό ν•©λ‹ˆλ‹€.     

μ‚½μž…μ΄μƒ

  • 자료λ₯Ό μ‚½μž…ν•  λ•Œ νŠΉμ • 속성에 ν•΄λ‹Ήν•˜λŠ” 값이 μ—†μ–΄ NULL을 μž…λ ₯ν•΄μ•Ό ν•˜λŠ” ν˜„μƒ     

갱신이상

  • μ€‘λ³΅λœ 데이터쀑 μΌλΆ€λ§Œ κ°±μ‹ λ˜μ–΄ 데이터 λͺ¨μˆœμ΄ λ°œμƒν•˜λŠ” ν˜„μƒ

μ‚­μ œμ΄μƒ

  • μ–΄λ–€ 정보λ₯Ό μ‚­μ œν•˜λ©΄ μ˜λ„ν•˜μ§€ μ•Šμ€ λ‹€λ₯Έ λ°μ΄ν„°κΉŒμ§€ μ‚­μ œλ˜λŠ” ν˜„μƒ


πŸ‘‰πŸ»‘λ‚˜μœ' λ¦΄λ ˆμ΄μ…˜μ€ μ–΄λ–»κ²Œ νŒŒμ•…ν•˜λŠ”κ°€?

  • μ •κ·œν™”λŠ” 뢈만쑱슀러운 λ‚˜μœ λ¦΄λ ˆμ΄μ…˜μ˜ μ• νŠΈλ¦¬λ·°νŠΈλ“€μ„ λ‚˜λˆ„μ–΄μ„œ 쒋은 μž‘μ€ λ¦΄λ ˆμ΄μ…˜μœΌλ‘œ λΆ„ν•΄ν•˜λŠ” μž‘μ—…μ„ λ§ν•˜λŠ”λ°, λ‚˜μœ λ¦΄λ ˆμ΄μ…˜μ€ μ—”ν‹°ν‹°λ₯Ό κ΅¬μ„±ν•˜κ³  μžˆλŠ” μ• νŠΈλ¦¬λ·°νŠΈ κ°„μ˜ ν•¨μˆ˜μ  쒅속성(Functional Dependency)으둜 νŒλ‹¨ν•œλ‹€.
    νŒλ‹¨λœ ν•¨μˆ˜μ  쒅속성은 쒋은 λ¦΄λ ˆμ΄μ…˜ μ„€κ³„μ˜ μ •ν˜•μ  κΈ°μ€€μœΌλ‘œ μ‚¬μš©λœλ‹€. 즉, 각각의 μ •κ·œν˜•λ§ˆλ‹€ μ–΄λ– ν•œ ν•¨μˆ˜μ  쒅속성을 λ§Œμ‘±ν•˜λŠ” 지에 따라 μ •κ·œν˜•μ΄ μ •μ˜λ˜κ³ , κ·Έ μ •κ·œν˜•μ„ λ§Œμ‘±ν•˜μ§€ λͺ»ν•˜λŠ” μ •κ·œν˜•μ„ λ‚˜μœ λ¦΄λ ˆμ΄μ…˜μœΌλ‘œ νŒŒμ•…ν•œλ‹€.


πŸ‘‰πŸ»ν•¨μˆ˜μ  μ’…μ†μ„±μ΄λž€ 무엇인가?

  • μ •κ·œν™”λ₯Ό μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ†μ„±λ“€ κ°„μ˜ κ΄€κ³„성을 νŒŒμ•…ν•΄μ•Ό ν•˜λŠ”데, μ΄ μ†μ„±λ“€κ°„μ˜ κ΄€λ ¨μ„±μ„ ν•¨μˆ˜μ  μ’…속성이라고 ν•œλ‹€.
    일반적으둜 ν•˜λ‚˜μ˜ λ¦΄λ ˆμ΄μ…˜μ—λŠ” ν•˜λ‚˜μ˜ ν•¨μˆ˜μ  μ’…μ†μ„±λ§Œμ΄ μ‘΄μž¬ν•˜λ„둝 μ •κ·œν™”λ₯Ό ν•˜κ²Œλœλ‹€.
     ex) a➑b: aλŠ” κ²°μ •μž bλŠ” μ’…μ†μž
  • λΆ€λΆ„ ν•¨μˆ˜ 쒅속, μ™„μ „ ν•¨μˆ˜ 쒅속, 이행적 ν•¨μˆ˜ 쒅속이 μžˆλ‹€.

πŸ‘‰πŸ»μ •κ·œν™” μ’…λ₯˜μ™€ μˆœμ„œ

  1. 제1μ •κ·œν˜•: λ¦΄λ ˆμ΄μ…˜μ— μ†ν•œ λͺ¨λ“  μ†μ„±μ˜ 도메인이 μ›μžκ°’(automic value: ν•˜λ‚˜μ˜ κ°’)을 가지도둝 λΆ„ν•΄ν•œλ‹€.
  2. 제2μ •κ·œν˜•: 제 1μ •κ·œν˜•μ„ λ§Œμ‘±ν•˜κ³ , κΈ°λ³Έν‚€κ°€ μ•„λ‹Œ 속성이 기본킀에 μ™„μ „ν•¨μˆ˜μ’…μ†λ˜λ„λ‘ λΆ„ν•΄ν•œλ‹€.(λΆ€λΆ„ν•¨μˆ˜μ’…μ†μ œκ±°)
  3. 제3μ •κ·œν˜•: 제2μ •κ·œν˜•μ„ λ§Œμ‘±ν•˜κ³ , μ΄ν–‰μ ν•¨μˆ˜μ’…μ†μ„ 없애도둝 λΆ„ν•΄ν•œλ‹€.
  4. BCNF μ •κ·œν˜•: 제3μ •κ·œν˜•μ„ λ§Œμ‘±ν•˜κ³ , κ²°μ •μžκ°€ 후보킀가 λ˜λ„λ‘ λΆ„ν•΄ν•œλ‹€.

πŸ‘‰πŸ»μ—­μ •κ·œν™”λ₯Ό ν•˜λŠ” μ΄μœ μ— λŒ€ν•΄ μ•„λŠ”λŒ€λ‘œ μ„€λͺ…ν•΄μ£Όμ„Έμš”.

  • μ •κ·œν™”λ₯Ό κ±°μΉ˜λ©΄ λ¦΄λ ˆμ΄μ…˜ κ°„μ˜ μ—°μ‚°(JOIN μ—°μ‚°)이 λ§Žμ•„μ§€λŠ”λ°, μ΄λ‘œμΈν•΄ μ„±λŠ₯이 μ €ν•˜λ  μš°λ €κ°€ μžˆμŠ΅λ‹ˆλ‹€.
    μ΄λ ‡κ²Œ μƒκ²¨λ‚œ μ„±λŠ₯ λ¬Έμ œκ°€ μžˆλŠ”(μ½κΈ°μž‘μ—…μ΄ 많이 ν•„μš”ν•œ) DB의 μ „λ°˜μ μΈ μ„±λŠ₯을 ν–₯μƒμ‹œν‚€κΈ° μœ„ν•΄ λ°˜μ •κ·œν™”λ₯Ό ν•©λ‹ˆλ‹€.

즉, μ •κ·œν™”λŠ” μͺΌκ°œκ³  μ—­μ •κ·œν™”λŠ” ν•©μΉ˜λŠ” 것이닀.

Comments