정규화(Normalization)는 데이터베이스의 중복을 제거하고 데이터의 일관성과 무결성을 보장하기 위해 테이블을 구조화하는 과정입니다.
테이블의 모든 속성(컬럼)은 원자값(Atomic Value)만을 가져야 합니다. 즉, 하나의 컬럼에 콤마(,) 등으로 구분된 여러 개의 값이 들어가면 안 됩니다.
1NF를 만족하고, 기본키의 전체가 아닌 일부에만 종속된 속성(부분 함수 종속)이 없어야 합니다. 주로 복합키를 가진 테이블에서 발생하는 문제입니다.
(학생ID, 과목ID)에서 학생이름은 학생ID에만 종속된 경우2NF를 만족하고, 키가 아닌 속성 간의 종속(이행 함수 종속)이 없어야 합니다. 즉, 기본키 → 속성1 → 속성2와 같은 종속 구조가 있으면 안 됩니다.
학생ID → 학과ID, 그리고 학과ID → 학과이름인 경우성능 향상을 위해 정규화 규칙을 의도적으로 위반하여 데이터 중복을 허용하는 기법입니다. 정규화는 중복 제거에 유리하지만 JOIN 연산이 많아져 성능이 저하될 수 있습니다. 이를 해결하기 위한 전략입니다.
JOIN 횟수를 줄입니다.SELECT 시 연산을 줄입니다.| 단계 | 핵심 키워드 | 위반 예시 |
|---|---|---|
| 1NF | 원자성 (Atomic) | 한 컬럼에 여러 값(콤마) |
| 2NF | 부분 함수 종속 | 복합키의 일부에만 종속 |
| 3NF | 이행 함수 종속 | A → B → C 구조 |
| 반정규화 | 성능 향상 | 중복 데이터 허용 |
1. 한 컬럼에 여러 값이 들어가 있는 경우 위반되는 정규형은?
① 1NF
② 2NF
③ 3NF
④ 반정규화
2. 복합키의 일부에만 종속된 속성이 존재한다면 위반되는 정규형은?
① 1NF
② 2NF
③ 3NF
④ 반정규화
3. 다음 관계에서 위반되는 정규형은?
학생ID → 학과ID, 학과ID → 학과이름
① 1NF
② 2NF
③ 3NF
④ 반정규화
4. 데이터 중복을 허용하여 조회 성능을 높이는 기법은?
① 정규화
② 반정규화
③ 집계 함수
④ 부분 종속
5. 3정규형을 만족하는 테이블은 1정규형과 2정규형도 만족한다. → 이 문장이 올바른지 판단하시오.
학생ID를 통해 학과ID를 알 수 있고, 학과ID를 통해 학과이름을 알 수 있습니다. 이는 이행 함수 종속의 전형적인 예시로, 3정규형을 위반합니다.