-
[Database] 정규화(1NF~BCNF) 개념과 예시업무 자동화/Database 2025. 11. 8. 19:44

정규화란?
데이터베이스 정규화는 데이터 구조를 체계적으로 나누어 중복을 줄이고, 이상 현상(삽입·수정·삭제 시 모순)을 방지하는 과정이다.
제대로 정규화된 스키마는- 같은 정보가 여러 테이블에 중복 저장되는 것을 줄이고,
- 특정 컬럼만 수정해도 전체 데이터가 일관되게 유지되며,
- 조회·변경 로직을 단순하게 만들어 유지보수를 쉽게 한다.
정규형의 의미와 기준
1. 제1정규형 (1NF)
모든 속성이 더 이상 쪼갤 수 없는 원자 값(Atomic Value) 만을 가지는 상태
한 칸에 여러 값을 넣지 않고, 반복 컬럼 없이 “표 형태”를 깔끔하게 만드는 것이 핵심이다.2. 제2정규형 (2NF)
1NF를 만족한 상태에서, 복합키의 일부에만 의존하는 컬럼(부분함수종속) 을 제거한 상태
기본키가 여러 컬럼으로 이루어져 있다면, 모든 비키 컬럼은 그 전체 키에 의존해야 한다.3. 제3정규형 (3NF)
2NF를 만족하면서, 기본키가 아닌 컬럼이 또 다른 기본키가 아닌 컬럼에 의존하지 않도록(이행함수종속 제거) 정리한 상태
“키가 아닌 값은 오직 키에만 의존한다”는 구조를 만드는 단계다.4. BCNF (Boyce-Codd 정규형)
모든 함수 종속 X → Y 에 대해, X가 반드시 슈퍼키인 상태
3NF보다 더 엄격하게 “결정자=키” 원칙을 적용해, 애매한 종속 관계와 이상 현상을 최대한 제거한 형태1. 제1정규형 (1NF)
1) 정규형 (정의)
“모든 속성이 더 이상 나눌 수 없는 원자 값(Atomic) 만 가지도록 만든 상태”
조건:
- 한 셀에 값 하나만
- 반복 컬럼 없음 (전화1, 전화2, 전화3… 이런 거 X)
- 레코드들이 동일한 컬럼 구조를 가짐
2) 정규화
- 반복되는 값 / 목록 컬럼을 분리해서 별도 테이블로 뺀다.
- 기본 키(PK)를 명확히 정한다.
3) 예시
(정규화 전) — 한 고객이 여러 전화번호를 한 칸에:
고객ID고객명전화번호C001 김철수 010-1111-1111, 010-2222-2222 문제:
- 전화번호 검색/수정이 애매함 (“두 번째 번호만 바꾸기” 같은 경우)
(1NF 정규화 후) — 전화번호를 행 단위로:
고객
고객ID고객명C001 김철수 고객전화
고객ID전화번호C001 010-1111-1111 C001 010-2222-2222 2. 제2정규형 (2NF)
1) 정규형
“1NF이고, 기본키가 복합키일 때 부분함수종속이 없는 상태”
- 기본키가 (A, B) 같이 둘 이상일 때
- 다른 컬럼들이 A 또는 B 일부에만 의존하면 안 되고,
- 항상 (A, B) 전체에 의존해야 한다.
2) 정규화
- 복합키의 일부에만 의존하는 속성을 분리하여 새로운 테이블로 이동
- 의존 대상이 되는 속성 쪽에 PK를 두고, 원래 테이블은 FK로 참조
3) 예시
(정규화 전) — 주문 상세 테이블:
주문ID상품ID상품명단가수량O001 P10 키보드 30 2 O001 P20 마우스 20 1 여기서 PK는 (주문ID, 상품ID)
그런데 상품명, 단가는 사실 상품ID에만 의존함 → 부분함수종속 → 2NF 위반(2NF 정규화 후)
주문상세
주문ID상품ID수량O001 P10 2 O001 P20 1 상품
상품ID상품명단가P10 키보드 30 P20 마우스 20 효과:
- 상품 가격 변경 시 상품 테이블만 수정하면 됨.
3. 제3정규형 (3NF)
1) 정규형
“2NF이고, 기본키가 아닌 속성이 또 다른 기본키가 아닌 속성에 의존하지 않는 상태”
= 이행함수종속(키 → A → B) 제거.
2) 정규화
- “키가 아닌 컬럼 → 키가 아닌 컬럼” 의존 관계를 찾아서,
- 그 부분을 별도 테이블로 분리하고,
- 원래 테이블에서는 해당 키만 남기고 참조하도록 한다.
3) 예시
(정규화 전) — 고객 테이블:
고객ID고객명우편번호도시배송비구간C001 김철수 06236 서울 A구간 C002 이영희 48058 부산 B구간 가정:
- 우편번호 → 도시
- 도시 → 배송비구간
즉 고객ID → 우편번호 → 도시 → 배송비구간
키 아닌 컬럼들끼리 의존 → 3NF 위반(3NF 정규화 후)
고객
고객ID고객명우편번호C001 김철수 06236 C002 이영희 48058 우편번호_지역
우편번호도시배송비구간06236 서울 A구간 48058 부산 B구간 효과: 도시/배송 정책이 바뀌어도 지역 테이블만 수정
4. BCNF (Boyce-Codd 정규형)
BCNF(보이스-코드 정규형)
1) 정규형 (정의)
“모든 함수 종속 X → Y에 대해, X가 반드시 슈퍼키(Super Key)인 상태”
3NF보다 한 단계 더 엄격함.
주로 복합 키 + 여러 후보키가 얽혀 있을 때 문제를 잡아낸다.2) 정규화
- 함수 종속들을 정리한다. (업무 규칙 기반)
- “좌변(X)이 슈퍼키가 아닌데도 종속 관계가 있는 경우”를 찾는다.
- 그 종속을 기준으로 테이블을 분해:
- 하나는 X를 키로 갖는 테이블
- 다른 하나는 기존 키를 유지하는 테이블
3) 예시
상황 가정
- 한 과목은 한 명의 교수만 담당
- 한 교수는 특정 과목만 강의
- 어떤 시간대/강의실에는 하나의 (교수-과목)만 배정
(정규화 전) — 강의 배정 테이블:
교수과목강의실김교수 DB 101 이교수 네트워크 101 업무 규칙:
- 교수 → 과목
- 과목 → 교수 (1:1 관계라고 가정)
- 실제로는 (교수, 강의실)이 키처럼 보이지만,
교수 자체가 다른 속성을 결정할 수 있어 슈퍼키가 아닌 결정자 문제가 생김 → BCNF 위반
(BCNF 정규화 후)
교수과목
교수과목김교수 DB 이교수 네트워크 강의배정
과목강의실DB 101 네트워크 101 모든 함수 종속의 좌변이 각 테이블에서 슈퍼키가 되도록 분해
'업무 자동화 > Database' 카테고리의 다른 글
[Database] SQL의 정규표현식: 정의, 핵심 패턴 표, DBMS별 사용법, 이메일·전화번호·주소 예시 (0) 2025.11.12 [Database] SQL Window 함수 개념과 사용 예시 (0) 2025.11.11 [Database] 반정규화(Denormalization)의 개념과 적용 (0) 2025.11.10 [Database] 데이터 모델링의 특징 및 유의사항 (0) 2025.11.07 [Database] 데이터베이스 정의와 유형 (0) 2025.11.05