정규화(Normalization)는 데이터의 중복을 제거하고 무결성을 유지하며, 변경 시 이상(Anomaly)을 방지 하기 위해 테이블을 구조화하는 과정이다. 관계형 데이터베이스 설계에서 핵심 원칙 중 하나다.
정의 : 모든 필드는 더 이상 분해할 수 없는 **원자값(Atomic Value)**만 포함해야 한다.
문제 해결 :
반복 속성 제거 (ex: 신청항목1, 신청항목2 → 항목 테이블로 분리)
하나의 셀에 여러 값 저장 금지
이상 방지 :
삽입 이상: 일부 항목이 없을 경우 전체 레코드 저장 불가
삭제 이상: 특정 항목 삭제 시, 전체 정보 손실 가능
✅ 제2정규형 (2NF) - 부분 함수 종속 제거
전제 조건 : 제1정규형 만족 + 기본키가 복합키
정의 : 기본키의 일부 에만 종속되는 속성(부분 종속)을 제거
문제 해결 :
신청ID + 항목코드의 복합키를 가진 경우, 신청자명처럼 항목과 무관한 속성은 분리해야 함
이상 방지 :
변경 이상: 하나의 항목이 바뀌면 관련 없는 값도 영향을 받음
삽입/삭제 이상 개선
✅ 제3정규형 (3NF) - 이행적 종속 제거
전제 조건 : 제2정규형 만족
정의 : 기본키가 아닌 속성이 다른 비프라이머리 속성에 종속 되지 않도록 함
예시 :
결과코드(RSLT_CD) → 결과설명
→ 코드만 저장하고, 설명은 별도 코드 테이블에서 참조
문제 해결 :
중복 설명 제거, 일관성 확보
데이터 사전처럼 설명값을 통일 관리 가능
이상 종류
설명
삽입 이상
일부 정보가 없으면 데이터를 삽입할 수 없음
삭제 이상
하나의 정보 삭제 시, 관련 없는 정보도 사라질 수 있음
갱신 이상
동일 정보가 여러 위치에 있어, 하나만 수정 시 불일치 발생
항목
정규화
비정규화
목적
데이터 무결성, 중복 제거
성능 향상 (조회, 조인 최소화)
구조
테이블 다수, 관계 명확
테이블 수 적음, 중복 허용
사용처
운영 DB (OLTP), 입력/갱신 중심
데이터마트, 리포트용 (OLAP)
기존 테이블명 : INF_DSSN_AJST_REQ_INFO
업무 영역 : 정산 이의조정 신청 정보 관리
🔍 0단계: 비정규형 (Unnormalized Form, UNF)
문제 항목
설명
반복 속성
신청항목1, 신청항목2, 금액1, 금액2 등 반복적으로 존재
다중 값
하나의 셀에 복수 항목 포함 가능성
이행적 종속
결과코드 → 결과설명 등
혼합 데이터
신청 정보, 항목 정보, 처리 상태, 결과 등이 한 테이블에 혼합
조치
설명
반복 속성 분리
신청 항목 및 금액을 각각 행(row)으로 분리
원자값 유지
각 셀에 단일값만 존재하도록 구조 변경
OBJC_ADJS_APLC : 신청항목코드, 금액 등
✅ 제2정규형 (2NF): 부분 함수 종속 제거
조치
설명
신청ID + 항목코드 → 금액 → 항목코드에 무관한 속성 분리
신청자명, 신청일 등은 신청ID에만 종속 → 신청 마스터 테이블로 분리
마스터-디테일 구조 설계
신청 정보(MF) ↔ 신청 항목(Detail)로 분리
TB_MF_OBJC_ADJS_APLC_L : 신청자명, 신청일, 부서 등
OBJC_ADJS_APLC : 항목별 금액 등
조치
설명
코드-설명 분리
결과코드(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) 까지 정규화 완료
반복 속성 제거, 의미 단위 테이블 분리, 코드 체계화 등 전형적인 정규화 적용 사례
추후 조회 최적화를 위한 부분 비정규화 (예: 조회용 조인 뷰 구성)는 고려 여지 있음