반응형
1. 데이터 정규화 (Normalization)
데이터 정규화는 '데이터 중복을 제거하여 이상 현상(Anomaly)을 방지하고, 데이터를 구조적으로 쪼개는 과정'입니다. 실무에서는 보통 제3정규화 혹은 BCNF까지를 필수로 진행합니다.
| 종류 | 설명 | 핵심 암기 문구 |
|---|---|---|
| 1NF | 원자값을 가진다. | 한 칸에 하나씩! (원자화) |
| 2NF | 부분 종속 제거 (완전 함수 만족) | 기본키 전체에만 매달려! |
| 3NF | 이행 종속 제거 | 주인(PK) 아닌 애들끼리 친하지 마! |
| BCNF | 결정자는 무조건 후보키 | 결정자는 무조건 후보키여야 해! |
| 4NF | 다치 종속 제거 | 상관없는 여러 값들을 한데 묶지 마! |
| 5NF | 조인 종속 제거 | 조인했을 때 이상 없게 다 쪼개! |
1.1 정규화를 하는 이유 (이상 현상 방지)
정규화를 하지 않아 데이터가 한 곳에 뭉치면 세 가지 ‘이상 현상[Anomaly]’이 발생합니다.
- 삽입 이상: 데이터를 넣고 싶은데 불필요한 정보까지 함께 넣어야 함.
→ 예: 학생을 등록하는데 아직 수강 신청을 안 해서 등록 불가 - 삭제 이상: 정보 하나를 지웠는데 보존해야 할 다른 정보까지 지워짐.
→ 예: 수강 취소를 했더니 학생 신상 정보까지 삭제 - 갱신 이상: 중복된 데이터 중 일부만 수정되어 데이터 간 불일치 발생.
→ 예: 학과명이 바뀌었는데 일부 학생 레코드에서만 수정
1NF
1.2 제 1 정규화 (1NF)
‘모든 속성은 원자값을 가져야 한다.’는 조건입니다. (다중값 제거) 즉, 한 속성에 여러 값이 들어있으면 안 됩니다.
[수정 전]
| 학번 | 이름 | 수강과목 |
|---|---|---|
| 101 | 김철수 | Java, SQL |
[수정 후]
| 학번 | 이름 | 수강과목 |
|---|---|---|
| 101 | 김철수 | Java |
| 101 | 김철수 | SQL |
2NF
※ ‘학과명’은 ‘학번’에 의해서만 결정됩니다. (부분 종속 발생)
1.3 제 2 정규화 (2NF)
제 2 정규화에서는 부분 함수 종속성을 제거해야 합니다. (= 완전 함수 종속을 만족해야 함)
즉, 기본키의 부분집합이 결정자가 되면 안 되며, 일반 속성은 주식별자 전체에 종속이어야 합니다.
[수정 전] (기본키: 학번, 과목코드)
| 학번 | 과목코드 | 성적 | 학과명 |
|---|---|---|---|
| 101 | CS01 | A | 컴퓨터공학 |
[수정 후]
- 학생 테이블: [학번, 학과명]
- 성적 테이블: [학번, 과목코드, 성적]
3NF
※ 학번 → 학과, 학과 → 위치 관계로 이행 함수 종속이 성립합니다.
1.4 제 3 정규화 (3NF)
이행 함수 종속을 제거해야 합니다.
이행 함수 종속이란 A → B 이고, B → C 일 때 A → C 관계를 만족하는 것을 말합니다.
[수정 전] (기본키: 학번)
| 학번 | 학과 | 학과실 위치 |
|---|---|---|
| 101 | 컴퓨터공학 | 공학관 1층 |
[수정 후]
- 학생-학과 테이블: [학번, 학과]
- 학과-위치 테이블: [학과, 학과실 위치]
BCNF
※ ‘교수명’이 ‘과목명’을 결정하지만 교수명은 후보키가 아닙니다.
1.5 BCNF (Boyce-Codd Normal Form)
모든 결정자는 후보키여야 한다는 원칙입니다.
[수정 전] (기본키: 학번 + 과목명)
| 학번 | 과목명 | 교수명 |
|---|---|---|
| 101 | 데이터베이스 | 이교수 |
| 102 | 데이터베이스 | 이교수 |
[수정 후]
- 교수-과목 테이블: [교수명, 과목명]
- 수강-교수 테이블: [학번, 교수명]
1.6 제 4 정규화 (4NF)
다치 종속(Multi-valued Dependency)을 제거합니다. A 속성 하나에 B 속성이 여러 개이고, C 속성이 여러 개일 수 있는데 B와 C는 독립인 경우(A→→B, A→→C) 발생합니다.
[수정 전]
| 교수명 | 전공 | 취미 |
|---|---|---|
| 김교수 | DB | 테니스 |
| 김교수 | OS | 수영 |
[수정 후] 교수-전공[교수명, 전공], 교수-취미[교수명, 취미]로 분리
1.7 제 5 정규화 (5NF)
조인 종속(Join Dependency)을 제거합니다. 4NF 이후 테이블을 조인했을 때 원래 데이터가 복구되지 않거나 불필요한 중복이 생기는 경우를 방지하기 위해 더 잘게 쪼개는 단계입니다. (실무에선 매우 드묾)
1.8 핵심 문제 정리
- 정규화는 ‘논리 데이터 모델’의 일관성을 확보하고 속성들을 가장 적절한 엔터티에 배치시킨다.
- 제 1 정규형은 모든 인스턴스가 반드시 하나의 값(원자값)을 가져야 함을 의미한다.
- 제 3 정규형을 만족하면 당연히 제 2 정규형(완전 함수 종속)도 만족하는 상태다.
[참고] NULL 관련 핵심 요약
- 집계 함수(SUM, AVG 등) 계산 시 NULL값은 제외된다. (0 처리 아님!)
- NULL 값에 어떤 숫자를 더하거나 연산해도 결과는 NULL이다.
- ‘NULL = NULL’의 비교 결과는 False 혹은 Unknown이다.
- NULL값과 숫자를 비교해도 결과는 항상 Unknown이다.
반응형
'IT 자격증 > SQLP' 카테고리의 다른 글
| [SQL자격검정실전문제] 3. SQL 기본 (DDL, DML, DCL, TCL) (0) | 2026.01.11 |
|---|---|
| [SQL자격검정실전문제] 1. 데이터 모델링의 이해 (0) | 2026.01.11 |