μ •κ·œν™” (λ°μ΄ν„°λ² μ΄μŠ€ Normalization)

2025. 8. 26. 23:51·곡뢀/μ •λ³΄μ²˜λ¦¬κΈ°μ‚¬ 곡뢀기둝

 

 

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

- κ΄€κ³„ν˜• 데이터 베이슀 μ„€κ³„μ‹œ, λ°μ΄ν„°μ˜ 쀑볡을 μ΅œμ†Œν™”ν•˜κ³  데이터 무결성을 ν™•λ³΄ν•˜κΈ° μœ„ν•΄ ν…Œμ΄λΈ”μ„ κ΅¬μ‘°ν™”ν•˜λŠ” κ³Όμ •

- 데이터가 μ€‘λ³΅λ˜λ©΄ μ €μž₯곡간이 낭비될 뿐만 μ•„λ‹ˆλΌ ν•˜λ‚˜ μˆ˜μ •ν•˜λ©΄ μ „λΆ€ μˆ˜μ •ν•΄μ•Ό ν•˜λŠ” "μ΄μƒν˜„μƒ" anomaly 이 λ°œμƒν•  수 있음. 

 

μ΄μƒν˜„μƒμ˜ μ’…λ₯˜

1) μ‚½μž…μ΄μƒ : λΆˆν•„μš”ν•œ 정보 μ—†μ΄λŠ” μƒˆλ‘œμš΄ 데이터λ₯Ό μ‚½μž…ν•  수 μ—†λŠ” ν˜„μƒ (예: 아직 μˆ˜κ°• μ‹ μ²­ν•œ 학생이 μ—†λŠ” μ‹ κ·œ κ°•μ’Œ 정보λ₯Ό λ“±λ‘ν•˜μ§€ λͺ»ν•˜λŠ” 경우)

2) κ°±μ‹  이상 : μ€‘λ³΅λœ 데이터 쀑 μΌλΆ€λ§Œ μˆ˜μ •λ˜μ–΄ 데이터 λΆˆμΌμΉ˜κ°€ λ°œμƒν•˜λŠ” ν˜„μƒ (예: ν•œ ν•™μƒμ˜ μ£Όμ†Œ 정보가 μ—¬λŸ¬ 곳에 μžˆλŠ”λ°, ν•œ 곳만 μˆ˜μ •ν•˜λŠ” 경우)

3) μ‚­μ œ 이상 : νŠΉμ • 정보λ₯Ό μ‚­μ œν•˜λ©΄, μ›μΉ˜ μ•ŠλŠ” λ‹€λ₯Έ μ •λ³΄κΉŒμ§€ ν•¨κ»˜ μ‚­μ œλ˜λŠ” ν˜„μƒ (예: μ–΄λ–€ 학생이 μˆ˜κ°•μ„ μ² νšŒν–ˆμ„ λ•Œ, κ·Έ κ°•μ’Œ μ •λ³΄κΉŒμ§€ μ‚¬λΌμ§€λŠ” 경우) 

 

 

 

2. μ •κ·œν™” 단계 (1, 2, 3, BCNF) 

제1μ •κ·œν˜• (ν‚€μ›Œλ“œ: μ›μžκ°’) 

νŠΉμ§•

- ν…Œμ΄λΈ”μ˜ λͺ¨λ“  μ»¬λŸΌμ€ λ°˜λ“œμ‹œ μ›μžκ°’μ„ κ°€μ Έμ•Ό ν•œλ‹€. (*μ›μžκ°’: 더이상 μͺΌκ°€ 수 μ—†λŠ” κ°’)

- 즉, 각 행이 ν•˜λ‚˜μ˜ κ°’λ§Œ 가져야함. μ‰Όν‘œ λ“±μœΌλ‘œ 개수 늘리기 μ•ˆλ¨.  

 

 

제 2 μ •κ·œν˜• (ν‚€μ›Œλ“œ: μ™„μ „ν•¨μˆ˜ 쒅속) 

νŠΉμ§•

- 제 1μ •κ·œν˜• 만쑱 

- κΈ°λ³Έν‚€μ˜ 일뢀가 μ•„λ‹Œ λͺ¨λ“  μ»¬λŸΌμ€ κΈ°λ³Έν‚€ 전체에 μ™„μ „ ν•¨μˆ˜ μ’…μ†λ˜μ–΄μ•Ό ν•œλ‹€. 

- ( *μ™„μ „ν•¨μˆ˜μ’…μ†: 컬럼이 κΈ°λ³Έν‚€ 전체에 μ˜ν•΄ κ²°μ •λ˜μ–΄μ•Ό ν•˜λ©°, κΈ°λ³Έν‚€μ˜ μΌλΆ€μ—λ§Œ μ’…μ†λ˜μ–΄μ„œλŠ” μ•ˆ λœλ‹€λŠ” 뜻) 

- μ „μ œ: κΈ°λ³Έν‚€κ°€ "볡합킀" 일 경우 !!! 즉, 2NFλŠ” 볡합킀 ν…Œμ΄λΈ”μ—μ„œλ§Œ 의미 있음. 단일킀면 μžλ™μœΌλ‘œ 2NF 만쑱.

- λΆ€λΆ„ν•¨μˆ˜ 쒅속이 λ°œμƒν•˜λŠ” 뢀뢄은 λ³„λ„μ˜ ν…Œμ΄λΈ”λ‘œ λΆ„λ¦¬ν•œλ‹€ 

 

제 3 μ •κ·œν˜• (이행적 ν•¨μˆ˜ 쒅속 없어야함)

νŠΉμ§• 

- 제 2 μ •κ·œν˜• 만쑱 

- κΈ°λ³Έν‚€κ°€ μ•„λ‹Œ 일반 μ»¬λŸΌμ— μ’…μ†λ˜λŠ” 컬럼이 μ—†μ–΄μ•Ό 함. 

- 기본킀도 μ•„λ‹Œ 컬럼이 νŠΉμ • μ»¬λŸΌμ„ κ²°μ •ν•΄μ„œλŠ” μ•ˆλœλ‹€λŠ” 뜻 

- μ˜ˆμ‹œ: '학생' ν…Œμ΄λΈ”μ—μ„œ 기본킀인 'ν•™μƒλ²ˆν˜Έ'κ°€ 'ν•™κ³Όλͺ…'을 κ²°μ •ν•˜κ³ , 'ν•™κ³Όλͺ…'이 '학과사무싀 μœ„μΉ˜'λ₯Ό κ²°μ •ν•˜λŠ” 경우 (ν•™μƒλ²ˆν˜Έ → ν•™κ³Όλͺ… → 학과사무싀 μœ„μΉ˜)

- 이행적 ν•¨μˆ˜ 쒅속이 λ°œμƒν•˜λŠ” 뢀뢄은 λ³„λ„μ˜ ν…Œμ΄λΈ”λ‘œ λΆ„λ¦¬ν•œλ‹€ = 즉, κΈ°λ³Έν‚€ μ•„λ‹Œ 컬럼끼리 쒅속성이 있으면 뢄리해야 함.

 

BCNF (Boyce-Codd Normal Form) = " λͺ¨λ“  κ²°μ •μžκ°€ 후보킀(Candidate Key)μ—¬μ•Ό ν•œλ‹€." 

- 제3μ •κ·œν˜•μ„ λ³΄μ™„ν•˜λŠ” κ°•λ ₯ν•œ μ •κ·œν˜• 

- *κ²°μ •μž: λ‹€λ₯Έ 컬럼의 값을 κ³ μœ ν•˜κ²Œ κ²°μ •ν•˜λŠ” 컬럼 의미. 

- μ‹€λ¬΄μ—μ„œλŠ” 거의 μ•ˆ μ“°μ§€λ§Œ μ΄λ‘ μ μœΌλ‘œλŠ” μ•Œμ•„λ‘¬μ•Ό 함

- μ˜ˆμ‹œ: (ν•™μƒλ²ˆν˜Έ, νŠΉκ°•λͺ…)이 기본킀인 ν…Œμ΄λΈ”μ—μ„œ, ν•œ κ΅μˆ˜λŠ” ν•œ νŠΉκ°•λ§Œ λ‹΄λ‹Ήν•  수 μžˆλ‹€λŠ” μ œμ•½μ΄ μžˆλ‹€λ©΄ 'ꡐ수' 컬럼이 'νŠΉκ°•λͺ…'을 κ²°μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λ•Œ 'ꡐ수'λŠ” 후보킀가 μ•„λ‹ˆλ―€λ‘œ BCNFλ₯Ό μœ„λ°°ν•©λ‹ˆλ‹€.

 

 

μ •κ·œν™”λŠ” 쀑볡 제거λ₯Ό ν•˜κΈ° μœ„ν•΄ μœ„ μ •κ·œν˜• 쑰건을 λ‹€ λ§žμΆ”λ €κ³  ν•œλ‹€. = ν…Œμ΄λΈ” 뢄리가 λ§Žμ•„μ§

κ·ΈλŸ¬λ‚˜, 데이터λ₯Ό 뢈러였기 μœ„ν•΄μ„œλŠ” λ‹€μ‹œ JOIN λ§Žμ•„μ Έμ„œ μ„±λŠ₯ λ–¨μ–΄μ§ˆ 수 있기 λ•Œλ¬Έμ— "λ°˜μ •κ·œν™”"도 진행함. 

 

 

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

- μ •κ·œν™”λ₯Ό 톡해 λΆ„λ¦¬ν•œ ν…Œμ΄λΈ”μ„ 쑰회 μ„±λŠ₯ ν–₯상을 μœ„ν•΄ λ‹€μ‹œ ν•©μΉ˜κ±°λ‚˜, 쀑볡 데이터λ₯Ό 일뢀 ν—ˆμš©ν•˜λŠ” 섀계 기법. 

- λͺ©ν‘œ: join 쀄이고 μ½λŠ” 속도 λΉ λ₯΄κ²Œ ν•˜κΈ° 

 

ν•„μš”ν•œ 이유 

- μ •κ·œν™”λ‘œ 인해 잘게 μͺΌκ°œμ§„ ν…Œμ΄λΈ”μ—μ„œ 데이터λ₯Ό λΆˆλŸ¬μ˜¬λ•Œ join 이 λ§Žμ•„μ§ 

- μ΄λŠ” μ„±λŠ₯ μ €ν•˜λ‘œ 이어짐. 

 

λ°˜μ •κ·œν™” 방법 

1. ν…Œμ΄λΈ” 톡합

2. 쀑볡 컬럼 μΆ”κ°€ 

3. νŒŒμƒ 컬럼, 집계 컬럼 μΆ”κ°€ 

 

μž₯점: 쑰회 속도 빠름, JOIN 쀄어듦, μ‹€μ‹œκ°„ 응닡성 ↑

단점: 쀑볡 데이터 증가 → κ°±μ‹  이상 κ°€λŠ₯μ„± ↑ (μˆ˜μ • μ‹œ λͺ¨λ“  쀑볡 데이터 λ°”κΏ”μ•Ό 함)

 

 

  • OLTP(νŠΈλžœμž­μ…˜ μœ„μ£Ό, 무결성 μ€‘μš”) → μ •κ·œν™” μœ μ§€
  • OLAP/쑰회 μ„œλΉ„μŠ€(리포트, 검색, 톡계) → λ°˜μ •κ·œν™” 적극 ν™œμš©
  • 보톡 DB μ„€κ³„λŠ” μ •κ·œν™”λ‘œ μ‹œμž‘ → μ„±λŠ₯ 문제 μ‹œ ν•„μš”ν•œ 곳만 λ°˜μ •κ·œν™”

 

 

즉, μ •κ·œν™”λŠ” 데이터 무결성, 일관성 κ°•ν™”λ₯Ό μœ„ν•΄ ν•„μš”ν•˜κ³  

λ°˜μ •κ·œν™”λŠ” μ„±λŠ₯, 쑰회 속도 κ°•ν™”λ₯Ό μœ„ν•΄ ν•„μš”ν•¨. 

 

 

'곡뢀 > μ •λ³΄μ²˜λ¦¬κΈ°μ‚¬ 곡뢀기둝' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

νŠΈλžœμž­μ…˜ 격리 μˆ˜μ€€ (Isolation Level)  (0) 2025.09.07
νŠΈλžœμž­μ…˜(Transaction) & ACID  (1) 2025.09.01
[240713] μ£Όμš” UML λ‹€μ΄μ–΄κ·Έλž¨ (μœ μŠ€μΌ€μ΄μŠ€ λ‹€μ΄μ–΄κ·Έλž¨, 클래슀 λ‹€μ΄μ–΄κ·Έλž¨, 순차 λ‹€μ΄μ–΄κ·Έλž¨)  (0) 2024.07.13
[240713] UML (Unified Modeling Language) 톡합 λͺ¨λΈλ§ μ–Έμ–΄  (0) 2024.07.13
[240712] μš”κ΅¬μ‚¬ν•­ 뢄석 CASE와 HIPO  (0) 2024.07.12
'곡뢀/μ •λ³΄μ²˜λ¦¬κΈ°μ‚¬ 곡뢀기둝' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • νŠΈλžœμž­μ…˜ 격리 μˆ˜μ€€ (Isolation Level)
  • νŠΈλžœμž­μ…˜(Transaction) & ACID
  • [240713] μ£Όμš” UML λ‹€μ΄μ–΄κ·Έλž¨ (μœ μŠ€μΌ€μ΄μŠ€ λ‹€μ΄μ–΄κ·Έλž¨, 클래슀 λ‹€μ΄μ–΄κ·Έλž¨, 순차 λ‹€μ΄μ–΄κ·Έλž¨)
  • [240713] UML (Unified Modeling Language) 톡합 λͺ¨λΈλ§ μ–Έμ–΄
jennnnna
jennnnna
  • jennnnna
    πŸ’»πŸ€Jennna's BLOG
    jennnnna
  • 전체
    였늘
    μ–΄μ œ
    • λΆ„λ₯˜ 전체보기 (75)
      • 컴퓨터 (1)
        • Operating system 운영체제 (8)
      • ν”„λ‘œκ·Έλž˜λ° (5)
        • JAVA (6)
        • PHP (1)
        • Android (7)
        • Apache (1)
        • Python (0)
      • 곡뢀 (15)
        • μ •λ³΄μ²˜λ¦¬κΈ°μ‚¬ 곡뢀기둝 (12)
        • TIL (3)
      • AI (3)
      • TTS (1)
      • LLM (2)
      • RAG (1)
      • μ–΄ν•™ (5)
        • English (5)
        • Japanese (ζ—₯本θͺž) (0)
      • κΈ€μ“°κΈ° (5)
  • λΈ”λ‘œκ·Έ 메뉴

    • ν™ˆ
    • λ°©λͺ…둝
  • 링크

  • 곡지사항

  • 인기 κΈ€

  • νƒœκ·Έ

    μ•ˆλ“œλ‘œμ΄λ“œ
    λΉ„μ „κ³΅μžκ°œλ°œμž
    μš΄μ˜μ²΄μ œκ³΅λΆ€
    μžλ°”κΈ°μ΄ˆ
    λΉ„μ „κ³΅μžcs곡뢀
    μ •λ³΄μ²˜λ¦¬κΈ°μ‚¬
    μžλ°”λ…ν•™
    μ •λ³΄μ²˜λ¦¬κΈ°μ‚¬ν•„κΈ°
    CS지식
    λ¬΅μ€μ§€μ°ΈμΉ˜κΉ€λ°₯
    μ •μ²˜κΈ°
    μžλ°”κ³΅μ‹λ¬Έμ„œ
    운영체제
    μ•ˆλ“œλ‘œμ΄λ“œκ°œλ°œ
    μ˜€λΈ”μ™„
    μž₯μΈν•œκ³Ό
    μΉ΄νŽ˜μ•Œλ°”
    cs곡뢀
    μžλ°”κ³΅λΆ€
    ν‹°μŠ€ν† λ¦¬μ±Œλ¦°μ§€
  • 졜근 λŒ“κΈ€

  • 졜근 κΈ€

  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.5
jennnnna
μ •κ·œν™” (λ°μ΄ν„°λ² μ΄μŠ€ Normalization)
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”