정규화의 형태에대해 알아보자
f
firststep 에디터
IT / 자격증 전문 라이터
2026년 2월 20일717
정규화의 형태에대해 알아보자
1) 1NF(제1정규형): “한 칸에는 값 1개”
핵심 규칙
- 속성(컬럼)은 하나의 값만 가져야 합니다.
- 한 컬럼에 “전화번호 2개”처럼 여러 값이 들어가면 1NF 위반입니다.
예시(전화번호)
(위반)
| 고객번호 | 이름 | 전화번호 |
| 31 | 홍길동 | 010-1234-1234, 010-1234-5678 |
(해결 1) 행으로 풀기
| 고객번호 | 이름 | 전화번호 |
| 31 | 홍길동 | 010-1234-1234 |
| 31 | 홍길동 | 010-1234-5678 |
그런데 이렇게 하면 이름이 중복되죠?
그래서 보통 더 깔끔하게는
(해결 2) 테이블 분리(정석)
- 고객(고객번호, 이름)
- 고객전화(고객번호, 전화번호순번, 전화번호)
2) 2NF(제2정규형): “부분 종속 제거”
핵심 규칙
- 1NF를 만족하면서,
- 일반 속성은 ‘전체 기본키’에 완전히 의존해야 합니다.
- 즉, 복합키(키가 2개 이상)일 때 한쪽 키에만 의존하는 컬럼이 있으면 2NF 위반입니다.
예시(주문내역)
주문내역 테이블의 키가 (주문번호, 상품번호)라고 해봅시다.
| 주문번호(PK) | 상품번호(PK) | 상품명 |
| O1 | P1 | 노트북 |
| O1 | P2 | 핸드폰 |
여기서 상품명은 상품번호만 알면 결정됩니다.
즉,
- 상품번호 → 상품명
이건 (주문번호, 상품번호) “전체”가 아니라 부분(상품번호)에 의존 → 부분 종속 → 2NF 위반
해결(분리)
- 주문내역(주문번호, 상품번호)
- 상품(상품번호, 상품명)
3) 3NF(제3정규형): “이행 종속 제거”
핵심 규칙
- 2NF를 만족하면서,
- 키가 아닌 속성이 다른 키 아닌 속성에 의존하면 안 됨
- 즉, “A(키) → B(일반) → C(일반)” 같은 연쇄 의존(이행 종속)을 제거합니다.
예시(주문 테이블에 고객등급이 같이 있는 경우)
| 주문번호(PK) | 고객번호 | 고객등급 ID | 고객등급명 |
| C | 1234 | 1 | VIP1 |
의존 관계를 보면
- 고객번호 → 고객등급ID
- 고객등급ID → 고객등급명
그래서 결과적으로 고객번호 → 고객등급명(간접)
이게 이행 종속이라 3NF 위반입니다.
해결(분리)
- 주문(주문번호, 고객번호)
- 고객(고객번호, 고객등급ID)
- 고객등급(고객등급ID, 고객등급명)
4) 2NF/3NF를 안 하면 생기는 대표 문제(이상 현상)
이미지에 나온 요지는 “중복 때문에 꼬인다”입니다.
- 수정 이상: 상품명 바뀌었는데 주문내역 여러 줄을 다 수정해야 함
- 삽입 이상: 상품 정보만 먼저 넣고 싶은데 주문이 없으면 넣기 애매
- 삭제 이상: 마지막 주문을 지우면 상품 정보/고객등급 정보까지 같이 사라질 수 있음
정규화는 이걸 막습니다.
5) BCNF / 4NF / 5NF는 뭐냐? (아주 쉽게)
이미지의 마지막은 “1~3NF로 대부분 끝나지만, 더 복잡하면 확장 정규형이 있다”는 소개입니다.
- BCNF: 3NF보다 더 엄격한 버전
- “결정자(왼쪽)가 항상 후보키여야 한다”
- 예: (교수ID, 과목) 같은 조합에서 “교수ID가 과목을 결정”하는데 교수ID가 후보키가 아니면 문제 → BCNF로 해결
- 4NF: “다치 종속” 제거
- 한 사람이 취미도 여러 개, 사용언어도 여러 개면
취미×언어 조합으로 데이터가 폭발적으로 중복됨 → 분리
- 한 사람이 취미도 여러 개, 사용언어도 여러 개면
- 5NF: “조인 종속” 문제 해결
- 여러 테이블로 쪼갰다가 다시 조인할 때 중복/손실 없이 복원되는지까지 고려하는 고급 단계
초간단 요약
- 1NF: 한 칸에 값 1개(리스트 금지)
- 2NF: 복합키에서 “부분 종속” 제거(상품명은 상품 테이블로)
- 3NF: “이행 종속” 제거(고객등급명은 등급 테이블로)
- 대부분 실무는 1~3NF가 기본이고, 더 복잡하면 BCNF/4NF/5NF를 고려
f
firststep 에디터 · IT / 자격증 전문 라이터
firststep.kr의 실무 에디터로서 무언가를 처음 도전하는 분들이 헤매지 않도록 검증된 지식과 실습 가이드를 작성합니다.
댓글 0개
댓글을 작성하려면 로그인이 필요합니다
간단한 이메일과 비밀번호로 3초 만에 가입하고 의견을 남겨보세요.
첫 번째 댓글을 남겨보세요!