정규화와 역정규화
설명 영상 정규화와 역정규화 · 2:28
왜 배우는가: 정규화는 데이터 중복과 갱신·삽입·삭제 이상을 막는 DB 설계의 기본 원리이며, 스키마 설계와 무결성 문제를 다루는 거의 모든 문항의 출발점이다. 반대로 성능을 위해 중복을 허용하는 역정규화와 함께 묻기 때문에 시험에서 반복해 출제된다.
출제 이력: 제125회 1교시 6번, 제118회 1교시 1번
1. 한 줄 정의와 핵심 키워드
정규화는 관계형 데이터베이스에서 테이블을 분해하여 데이터 중복과 삽입·갱신·삭제 이상을 제거하고 무결성을 유지하는 설계 절차다.
- 정규화(Normalization)
- 정규형(Normal Form)
- 함수 종속성(Functional Dependency)
- 이상 현상(Anomaly)
- 원자값(Atomic Value)
- 후보키(Candidate Key)
- 역정규화(Denormalization)
- 데이터 무결성(Data Integrity)
2. 개념 풀이
쉬운 말로 하면 한 테이블에 여러 사실을 섞어 넣지 않도록 나누는 일이다. 같은 정보가 여러 행에 반복되면 한 곳만 고쳐서 불일치가 생기므로, 사실 하나가 테이블 한 곳에만 기록되도록 구조를 바꾼다.
정식 정의는 다음과 같다. 정규화는 관계형 모델에서 릴레이션을 분해하여 정규형(Normal Form)을 만족시키는 과정이며, 함수 종속성에 근거해 이상 현상이 생기는 릴레이션을 재설계하는 방법이다. 이 과정은 정보의 무손실, 종속성 보존, 이상 현상 제거를 원칙으로 한다.
원자값은 더 이상 나눌 수 없는 단위의 값이다. 한 속성에 여러 값이 들어 있으면 원자값이 아니며, 1NF 위반이다. 함수 종속성은 속성 X의 값이 정해지면 Y의 값이 하나로 결정되는 관계(X→Y)를 말한다. 정규형 단계는 이 종속성의 종류를 기준으로 나뉜다. 이상 현상은 중복 때문에 생기는 문제로, 삽입 이상·갱신 이상·삭제 이상이 있다. 삭제 이상은 한 자료를 지우려다 관련 정보 전체가 사라지는 현상이다.
3. 등장 배경과 필요성
한 릴레이션에 서로 다른 엔티티의 속성을 섞으면 같은 정보가 여러 튜플에 반복 저장된다. 이 중복은 저장 공간을 낭비하고, 한쪽만 갱신하면 어느 값이 맞는지 알 수 없는 상태를 만든다. 이것이 정규화가 필요해진 직접적 배경이다.
에드거 F. 커드는 관계형 모델과 관련해 제1정규형(1NF), 제2·제3정규형 및 보이스와 함께 BCNF를 정의했다. 이후 4NF 이상이 다른 연구자들에 의해 추가되었다. 실무에서는 3NF 또는 BCNF까지 적용하는 것이 일반적이다.
정규화의 목적은 이상 현상 방지, 저장 공간 최소화, 자료 불일치 최소화(무결성 보장), 구조 안정화다. 정규화 후에는 데이터 입력·수정·삭제 성능이 좋아지지만, 여러 테이블을 결합해야 하므로 조회 비용이 늘어날 수 있다. 이 상충 관계 때문에 설계자는 정규화와 역정규화의 균형을 판단해야 한다.
4. 구성요소·원리·절차
정규화는 함수 종속성, 정규형, 분해 연산의 세 요소로 이루어진다. 종속 관계를 찾고, 정규형 조건에 어긋나는 종속을 분해로 없앤다.
| 구성요소 | 뜻 | 판정 기준 |
|---|---|---|
| 함수 종속성 | 속성 X 값이 정해지면 Y 값이 하나로 정해짐(X→Y) | 결정자 X와 종속 속성 Y |
| 정규형 | 릴레이션이 만족해야 할 제약 단계 | 1NF~BCNF |
| 분해 | 한 릴레이션을 둘 이상으로 나눔 | 무손실 조인, 종속성 보존 |
함수 종속성이 이상 현상의 뿌리다. 한 릴레이션 안에 의미가 다른 종속이 섞이면 삽입·갱신·삭제 이상이 생긴다. 그래서 종속 관계를 기준으로 릴레이션을 나눈다. 분해는 두 조건을 지켜야 한다. 첫째, 무손실 분해다. 분해한 릴레이션을 자연 조인하면 원래 정보가 그대로 복원되어야 한다. 둘째, 종속성 보존이다. 원래 있던 종속 관계가 분해 후 어느 릴레이션에서든 검사 가능해야 한다.
무손실 조건은 다음과 같이 쓴다.
$R_1 \cap R_2 \rightarrow R_1 \ \text{또는} \ R_1 \cap R_2 \rightarrow R_2$
R_1, R_2는 분해된 릴레이션이고, \cap는 두 릴레이션의 공통 속성이다. 공통 속성이 한쪽 릴레이션의 키를 결정하면 조인 결과가 틀어지지 않는다.
정규형 조건은 다음과 같다.
- 1NF: 모든 속성 값이 원자값이다. 반복 그룹과 다중값 속성은 행으로 펼친다.
- 2NF: 1NF이며, 기본키의 일부에만 종속하는 속성(부분 함수 종속)이 없다.
- 3NF: 2NF이며, 모든 함수 종속 X \rightarrow A에서 X가 슈퍼키이거나 A가 키의 일부다. 즉 이행 함수 종속이 없다.
- BCNF: 모든 결정자가 후보키다. 3NF보다 엄격하며, 일부 릴레이션에서는 종속성 보존이 깨질 수 있다.
절차는 다음 순서로 진행한다.
- 업무 규칙과 속성 목록을 모은다.
- 함수 종속성을 찾아 결정자와 종속 속성을 나열한다.
- 원자값이 아닌 속성을 분리해 1NF를 만족시킨다.
- 부분 종속과 이행 종속을 찾아 2NF, 3NF로 분해한다.
- 무손실과 종속성 보존을 검증하고, 필요하면 BCNF를 검토한다.
- 조회 성능 문제가 생기면 역정규화 여부를 판단한다.
정규화는 종속 관계를 기준으로 릴레이션을 분해해 이상 현상을 없애는 과정이다
5. 관련 법령·기준·표준
정규형 판정은 법령 조문이 아니라 학술 정의와 설계 관행을 따른다. 국내 법령에 정규화 기준 조항은 없다. 기준은 에드거 F. 커드가 제안한 정의를 중심으로 정리된다.
| 기준 | 제안 시기·주체 | 핵심 조건 | 비고 |
|---|---|---|---|
| 1NF | 커드, 도입 | 모든 속성 값이 원자값 | 정규화의 최소 조건 |
| 2NF·3NF | 커드, 정의 | 부분·이행 함수 종속 제거 | 실무에서 정규화 완료의 기준 |
| BCNF | 커드·보이스, 정의 | 결정자는 후보키 | 3NF를 강화한 형태 |
| 4NF 이상 | 이후 다른 이론가 | 다치 종속 등 | 실무 사용은 드묾 |
| 6NF | 데이트·다위·로렌츠, 2002년 소개 | 시간 등 특수 상황 | 일반 설계에서는 쓰지 않음 |
실무 설계에서는 3NF 이상이면 정규화 완료로 보는 경우가 많다. 다만 역정규화 전제로 정규화를 먼저 수행해야 하므로 표준 가이드도 완전 정규화를 권한다. 정규형 정의 자체는 제안 이후 큰 변경이 없고, 2002년 6NF가 가장 최근 정의다.
정규형과 BCNF는 판정 기준이 다르므로 구분해 쓴다. 구분 기준은 결정자가 후보키인지 여부다. 이행 함수 종속은 3NF에서 제거 대상이다.
6. 유형과 비교
정규형은 정규화 수준에 따라 1NF, 2NF, 3NF, BCNF로 나뉜다. 각 정규형은 앞 단계를 포함하며 더 강한 제약을 추가한다. 실무에서는 3NF 또는 BCNF까지 맞추는 것을 기본 목표로 삼는다.
| 정규형 | 제거 대상 | 만족 조건 | 주요 이상 해소 |
|---|---|---|---|
| 1NF | 반복 그룹·복합값 | 모든 속성값이 원자값 | 값 분리에 따른 검색 불가 |
| 2NF | 부분 함수 종속 | 1NF이고 기본키 일부에 종속되는 일반 속성 없음 | 복합키 일부에 의한 중복 |
| 3NF | 이행 함수 종속 | 2NF이고 일반 속성끼리 종속 없음 | 갱신 이상 |
| BCNF | 결정자가 후보키가 아닌 종속 | 모든 결정자가 후보키 | 후보키 간 종속에 의한 이상 |
표 해설: 정규형이 올라갈수록 테이블 수는 늘고 각 테이블의 의미는 단순해진다. 1NF에서 BCNF로 갈수록 종속 제거 범위가 넓어진다.
역정규화는 정규화된 구조를 되돌려 조회 성능을 높이는 기법이다. 대표 기법은 테이블 병합, 중복 컬럼 추가, 요약 테이블 생성, 파생 컬럼 저장이다. 정규화와는 목적이 반대이므로 적용 대상과 시점을 구분해 답해야 한다.
이어지는 내용
- 7. 장단점·한계와 개선 방향
- 8. 사례 또는 계산 예제
- 9. 최근 동향과 쟁점
- 10. 흔한 실수와 채점 포인트
- 11. 암기 정리
- 12. 답안 구성 예시
- 13. 예상 변형 문항
로그인하면 하루 2페이지까지 무료로 전체를 읽을 수 있습니다.
앱에서 이 단원 읽기