정규화(Normalization)
정규화는 데이터베이스의 중복을 최소화하고 데이터 무결성을 보장하기 위해 테이블을 분해하는 과정입니다.
목적
- 중복 제거: 같은 데이터가 여러 곳에 저장되는 것을 방지
- 데이터 무결성 보장: 일관성 있는 데이터 유지
- 저장 공간 효율성: 불필요한 저장 공간 절약
- 이상 현상 방지: 삽입, 삭제, 수정 이상 방지
이상 현상(Anomaly)의 종류
1. 삽입 이상(Insertion Anomaly)
새로운 데이터를 삽입할 때 원하지 않는 데이터도 함께 삽입해야 하는 현상
예시: 새로운 과목을 개설하려면 반드시 수강하는 학생이 있어야만 등록 가능
2. 삭제 이상(Deletion Anomaly)
특정 데이터를 삭제할 때 필요한 다른 데이터까지 함께 삭제되는 현상
예시: 마지막 학생이 수강을 취소하면 그 과목 정보도 함께 사라짐
3. 수정 이상(Update Anomaly)
데이터를 수정할 때 여러 곳의 데이터를 모두 수정해야 하는 현상
예시: 교수 연락처가 바뀌면 그 교수가 담당하는 모든 과목 레코드를 수정해야 함
정규화 단계별 설명
제1정규형(1NF: First Normal Form)
조건
- 원자값(Atomic Value)만을 포함해야 함
- 반복 그룹이 없어야 함
- 각 행은 고유해야 함
위반 사례
학생테이블
학번 | 이름 | 수강과목
101 | 김철수 | 수학,영어,과학
102 | 이영희 | 국어,수학
문제점: 수강과목 컬럼에 여러 값이 콤마로 구분되어 저장됨 (원자값 위반)
1NF 적용 후
학생수강테이블
학번 | 이름 | 수강과목
101 | 김철수 | 수학
101 | 김철수 | 영어
101 | 김철수 | 과학
102 | 이영희 | 국어
102 | 이영희 | 수학
제2정규형(2NF: Second Normal Form)
조건
- 1NF를 만족해야 함
- 완전 함수 종속이어야 함 (부분 함수 종속 제거)
함수 종속성 개념
- 함수 종속: X → Y (X가 결정되면 Y도 유일하게 결정)
- 완전 함수 종속: 기본키 전체에 종속
- 부분 함수 종속: 기본키의 일부에만 종속
위반 사례
수강테이블 (학번, 과목코드가 복합 기본키)
학번 | 과목코드 | 학생이름 | 과목명 | 성적
101 | CS101 | 김철수 | 컴퓨터 | A
101 | MA101 | 김철수 | 수학 | B
102 | CS101 | 이영희 | 컴퓨터 | A
문제점:
- 학생이름은 학번에만 종속 (부분 함수 종속)
- 과목명은 과목코드에만 종속 (부분 함수 종속)
2NF 적용 후
학생테이블
학번 | 학생이름
101 | 김철수
102 | 이영희
과목테이블
과목코드 | 과목명
CS101 | 컴퓨터
MA101 | 수학
수강테이블
학번 | 과목코드 | 성적
101 | CS101 | A
101 | MA101 | B
102 | CS101 | A
제3정규형(3NF: Third Normal Form)
조건
- 2NF를 만족해야 함
- 이행적 함수 종속 제거
이행적 함수 종속
A → B, B → C이면 A → C인 관계
위반 사례
학생테이블
학번 | 학생이름 | 학과코드 | 학과명
101 | 김철수 | CS | 컴퓨터공학과
102 | 이영희 | MA | 수학과
103 | 박민수 | CS | 컴퓨터공학과
함수 종속성: 학번 → 학과코드 → 학과명 문제점: 학번 → 학과명 (이행적 함수 종속)
3NF 적용 후
학생테이블
학번 | 학생이름 | 학과코드
101 | 김철수 | CS
102 | 이영희 | MA
103 | 박민수 | CS
학과테이블
학과코드 | 학과명
CS | 컴퓨터공학과
MA | 수학과
BCNF(Boyce-Codd Normal Form)
조건
- 3NF를 만족해야 함
- 모든 결정자가 후보키여야 함
후보키(Candidate Key)
테이블에서 각 행을 유일하게 식별할 수 있는 속성의 집합
BCNF 위반 사례
수업테이블
학생번호 | 과목 | 교수
S001 | 수학 | 김교수
S001 | 영어 | 이교수
S002 | 수학 | 박교수
S002 | 영어 | 이교수
가정:
- 한 학생은 과목당 한 명의 교수에게만 수업을 받음
- 한 교수는 하나의 과목만 담당함
함수 종속성: (학생번호, 과목) → 교수, 교수 → 과목 문제점: 교수가 결정자이지만 후보키가 아님
BCNF 적용 후
교수과목테이블
교수 | 과목
김교수 | 수학
이교수 | 영어
박교수 | 수학
수강테이블
학생번호 | 교수
S001 | 김교수
S001 | 이교수
S002 | 박교수
S002 | 이교수
➕4NF, 5NF
4NF (Fourth Normal Form): 다치 종속성 제거
5NF (Fifth Normal Form): 조인 종속성 제거
정리
정규형별 핵심 키워드
- 1NF: 원자값, 반복 그룹 제거
- 2NF: 완전 함수 종속, 부분 함수 종속 제거
- 3NF: 이행적 함수 종속 제거
- BCNF: 결정자 = 후보키
함수 종속성 표기법
- A → B: A가 B를 함수적으로 결정
- A ↛ B: A가 B를 함수적으로 결정하지 않음
- A ↔ B: A와 B가 서로를 결정 (1:1 관계)
문제 해결 접근법
1단계: 기본 정보 파악
- 테이블의 기본키 식별
- 각 속성 간의 관계 파악
- 비즈니스 규칙 이해
2단계: 함수 종속성 분석
- 모든 함수 종속 관계 나열
- 완전/부분/이행적 함수 종속 구분
- 결정자와 종속자 명확히 구분
3단계: 정규형 위반 확인
- 1NF: 원자값 조건 확인
- 2NF: 부분 함수 종속 존재 여부
- 3NF: 이행적 함수 종속 존재 여부
- BCNF: 결정자가 후보키인지 확인
4단계: 정규화 적용
- 위반 사항에 따라 테이블 분해
- 외래키 관계 설정
- 분해 후 무손실 조인 가능성 확인
실무에서의 정규화
정규화의 장단점
장점
- 데이터 일관성: 중복 제거로 일관성 보장
- 저장 공간 절약: 중복 데이터 최소화
- 유지보수 용이: 데이터 수정 시 한 곳만 변경
- 데이터 무결성: 참조 무결성 제약 가능
단점
- 성능 저하: 조인 연산 증가
- 복잡성 증가: 쿼리 작성의 복잡도 상승
- 개발 비용: 초기 설계 및 개발 시간 증가
정규화 수준 결정 기준
3NF까지 권장하는 경우
- OLTP 시스템: 트랜잭션 처리가 주목적
- 데이터 무결성이 중요: 금융, 의료 시스템
- 실시간 데이터 입력: 사용자 인터랙션이 많은 시스템
역정규화 고려하는 경우
- OLAP 시스템: 분석 및 리포팅이 주목적
- 읽기 성능 중시: 조회가 빈번한 시스템
- 대용량 데이터: 조인 비용이 과도한 경우
추가 학습
키(Key) 종류
- 슈퍼키(Super Key): 유일성을 만족하는 속성 집합 (최소성 X)
- 후보키(Candidate Key): 최소성과 유일성을 모두 만족
- 기본키(Primary Key): 후보키 중 선택된 대표 키
- 대체키(Alternate Key): 기본키가 아닌 후보키
- 외래키(Foreign Key): 다른 테이블의 기본키를 참조
무결성 제약조건
- 개체 무결성: 기본키는 NULL이나 중복값 불가
- 참조 무결성: 외래키는 참조 테이블에 존재하는 값이어야 함
- 도메인 무결성: 속성값은 해당 도메인에 속해야 함
- 사용자 정의 무결성: 비즈니스 규칙에 따른 제약조건