Skip to content

Latest commit

 

History

History
143 lines (98 loc) · 6.33 KB

File metadata and controls

143 lines (98 loc) · 6.33 KB

정규화 (Normalization)

🔸 정규화란?

정규화(Normalization)는 데이터의 중복을 제거하고 무결성을 유지하며, 변경 시 이상(Anomaly)을 방지하기 위해 테이블을 구조화하는 과정이다. 관계형 데이터베이스 설계에서 핵심 원칙 중 하나다.


✅ 제1정규형 (1NF) - 원자성 보장

  • 정의: 모든 필드는 더 이상 분해할 수 없는 **원자값(Atomic Value)**만 포함해야 한다.
  • 문제 해결:
    • 반복 속성 제거 (ex: 신청항목1, 신청항목2 → 항목 테이블로 분리)
    • 하나의 셀에 여러 값 저장 금지
  • 이상 방지:
    • 삽입 이상: 일부 항목이 없을 경우 전체 레코드 저장 불가
    • 삭제 이상: 특정 항목 삭제 시, 전체 정보 손실 가능

✅ 제2정규형 (2NF) - 부분 함수 종속 제거

  • 전제 조건: 제1정규형 만족 + 기본키가 복합키
  • 정의: 기본키의 일부에만 종속되는 속성(부분 종속)을 제거
  • 문제 해결:
    • 신청ID + 항목코드의 복합키를 가진 경우, 신청자명처럼 항목과 무관한 속성은 분리해야 함
  • 이상 방지:
    • 변경 이상: 하나의 항목이 바뀌면 관련 없는 값도 영향을 받음
    • 삽입/삭제 이상 개선

✅ 제3정규형 (3NF) - 이행적 종속 제거

  • 전제 조건: 제2정규형 만족
  • 정의: 기본키가 아닌 속성이 다른 비프라이머리 속성에 종속되지 않도록 함
  • 예시:
    • 결과코드(RSLT_CD) → 결과설명
      → 코드만 저장하고, 설명은 별도 코드 테이블에서 참조
  • 문제 해결:
    • 중복 설명 제거, 일관성 확보
    • 데이터 사전처럼 설명값을 통일 관리 가능

⛔ 정규화를 하지 않으면?

이상 종류 설명
삽입 이상 일부 정보가 없으면 데이터를 삽입할 수 없음
삭제 이상 하나의 정보 삭제 시, 관련 없는 정보도 사라질 수 있음
갱신 이상 동일 정보가 여러 위치에 있어, 하나만 수정 시 불일치 발생

💡 정규화 vs 비정규화

항목 정규화 비정규화
목적 데이터 무결성, 중복 제거 성능 향상 (조회, 조인 최소화)
구조 테이블 다수, 관계 명확 테이블 수 적음, 중복 허용
사용처 운영 DB (OLTP), 입력/갱신 중심 데이터마트, 리포트용 (OLAP)

정규화 적용 사례

🗂 대상 테이블

  • 기존 테이블명: INF_DSSN_AJST_REQ_INFO
  • 업무 영역: 정산 이의조정 신청 정보 관리

🔍 0단계: 비정규형 (Unnormalized Form, UNF)

문제 항목 설명
반복 속성 신청항목1, 신청항목2, 금액1, 금액2 등 반복적으로 존재
다중 값 하나의 셀에 복수 항목 포함 가능성
이행적 종속 결과코드 → 결과설명 등
혼합 데이터 신청 정보, 항목 정보, 처리 상태, 결과 등이 한 테이블에 혼합

✅ 제1정규형 (1NF): 원자값 분리

조치 설명
반복 속성 분리 신청 항목 및 금액을 각각 행(row)으로 분리
원자값 유지 각 셀에 단일값만 존재하도록 구조 변경

📌 분리된 테이블

  • OBJC_ADJS_APLC : 신청항목코드, 금액 등

✅ 제2정규형 (2NF): 부분 함수 종속 제거

조치 설명
신청ID + 항목코드 → 금액
→ 항목코드에 무관한 속성 분리
신청자명, 신청일 등은 신청ID에만 종속 → 신청 마스터 테이블로 분리
마스터-디테일 구조 설계 신청 정보(MF) ↔ 신청 항목(Detail)로 분리

📌 분리된 테이블

  • TB_MF_OBJC_ADJS_APLC_L : 신청자명, 신청일, 부서 등
  • OBJC_ADJS_APLC : 항목별 금액 등

✅ 제3정규형 (3NF): 이행적 종속 제거

조치 설명
코드-설명 분리 결과코드(RSLT_CD), 상태코드 등은 코드만 저장하고, 설명은 별도 테이블 관리
파생 속성 제거 변경 전/후 금액은 화면 계산으로 대체, 저장 제거

📌 코드 테이블 예시

  • OBJC_ADJS_APLC_PRGS_STAT_CD : 신청진행상태코드
  • OBJC_ADJS_RPSB_BLCT_CD : 조정사유코드
  • OBJC_ADJS_CNTS : 신청 이력 내용

🧾 정규화 전후 비교 요약

항목 비정규형 정규형 (3NF)
신청자 정보 항목 테이블 내 포함 TB_MF_OBJC_ADJS_APLC_L 로 분리
신청 항목 컬럼 반복 (항목1, 항목2...) OBJC_ADJS_APLC 행 단위 분리
상태/결과 코드 + 설명 혼합 코드만 저장, 설명은 별도 코드 테이블
이력관리 개별 컬럼 존재 OBJC_ADJS_CNTS 로 이력 테이블화

🏁 결론

  • 이 데이터 모델은 제3정규형 (3NF) 까지 정규화 완료
  • 반복 속성 제거, 의미 단위 테이블 분리, 코드 체계화 등 전형적인 정규화 적용 사례
  • 추후 조회 최적화를 위한 부분 비정규화 (예: 조회용 조인 뷰 구성)는 고려 여지 있음