정규화와 반정규화

정규화

정규화(Normalization)는 관계형 데이터베이스에서 데이터의 중복을 최소화하고, 데이터 무결성을 보장하기 위해 테이블 구조를 체계적으로 분해하는 과정이다.

정규화를 통해 이상 현상(Anomaly) 을 방지하고, 데이터 구조의 안정성과 유지보수성을 향상시킬 수 있다.

정규화 단계 요약

정규형핵심 조건
1NF (제1정규형)모든 속성 값은 원자값(Atomic Value) 이어야 한다.
2NF (제2정규형)1NF를 만족하고, 부분 함수 종속을 제거해야 한다. (완전 함수 종속)
3NF (제3정규형)2NF를 만족하고, 이행 함수 종속을 제거해야 한다.
BCNF (보이스-코드 정규형)3NF를 만족하고, 모든 결정자가 후보키여야 한다.
4NF (제4정규형)BCNF를 만족하고, 다치 종속(Multi-valued Dependency)을 제거해야 한다.
5NF (제5정규형)4NF를 만족하고, 조인 종속(Join Dependency)이 후보키를 통해서만 성립되어야 한다.

제1정규형 (1NF)

제1정규형은 릴레이션의 모든 속성 값이 원자값(Atomic Value) 으로만 구성되어야 한다는 규칙이다.

하나의 속성 값에 여러 개의 값이 들어갈 수 없다.

[정규화 전]

학번이름수강과목
1001김철수자료구조, 알고리즘
1002이영희운영체제

[1NF 정규화 후]

학번이름수강과목
1001김철수자료구조
1001김철수알고리즘
1002이영희운영체제

제2정규형 (2NF)

제2정규형은 릴레이션이 1NF를 만족하고 부분 함수 종속(Partial Funcional Dependency) 을 모두 제거한 상태여야 한다.

모든 속성이 기본키 전체에 완전 함수 종속되어야 한다.

[정규화 전] [수강 테이블]

학번과목코드교수명성적
1001CS101김교수A+
1001CS202이교수A0
1002CS101김교수B+

[2NF 정규화 후]

[수강 테이블]

학번과목코드성적
1001CS101A+
1001CS202A0
1002CS101B+

[과목 테이블]

과목코드교수명
CS101김교수
CS202이교수

제3정규형 (3NF)

제3정규형은 릴레이션이 2NF를 만족하고, 이행 함수 종속(Transitive Functional Dependency) 을 모두 제거한 상태여야 한다.

[정규화 전]

학번이름학과코드학과명
1001김철수CS컴퓨터과학
1002이영희EE전자공학
1003김철수CS컴퓨터과학
1004김철수EE전자공학

[3NF 정규화 후]

[학생 테이블]

학번이름학과코드
1001김철수CS
1002이영희EE
1003김철수CS
1004김철수EE

[학과 테이블]

학과코드학과명
CS컴퓨터과학
EE전자공학

BCNF (Boyce-Codd Normal Form)

BCNF는 3NF보다 강력한 정규형으로, 릴레이션의 모든 결정자가 후보키(Candidate Key)여야 한다는 규칙이다.

[BCNF 정규화 전]

수업교수강의실시간대
데이터베이스김교수A101월 1교시
데이터베이스김교수A101수 2교시
네트워크이교수B202월 1교시
알고리즘김교수A101화 3교시

[BCNF 정규화]

[교수-강의실 테이블]

교수강의실
김교수A101
이교수B202

[수업-교수 테이블]

수업교수
데이터베이스김교수
네트워크이교수
알고리즘김교수

[수업-시간 테이블]

수업시간대
데이터베이스월 1교시
데이터베이스수 2교시
네트워크월 1교시
알고리즘화 3교시

제4정규형 (4NF)

다치 종속(Multi-valued Dependency, MVD) 을 제거한 정규형

제5정규형 (5NF)

조인 종속(Join Dependency, JD) 이 후보키를 통해서만 성립되어야 하는 정규형

반정규화 (Denormalization)

반정규화는 정규화된 테이블 구조를 의도적으로 통합하거나 중복을 허용하여 데이터베이스의 성능을 향상 시키는 과정이다.

주요 기법:

  • 테이블 통합, 테이블 분할(수평/수직), 중복 속성 추가 등