목차
2. 정규화
2-1.. 정규화란?
2-1-1. 정규화를 하는 이유
2-1-2. 정규화의 결과
2-1-3. 정규화와 성능의 관계
2-2. 정규화 절차
2-2-1. 제1정규화
2-2-2. 제2졍규화
2-2-3. 제3정규화
2. 정규화
2-1. 정규화란?
데이터베이스의 이상현상(Anomaly)을 막기 위해 데이터의 중복을 최소화하면서 테이블을 보다 잘 조직화된 상태로 분해하는 과정이다.
쉽게 말해서, 하나의 테이블에 너무 많은 정보를 억지로 넣어두지 않고 중복되는 데이터와 종속 관계를 정리해서 테이블을 깔끔하게 분리하는 작업이라고 볼 수 있다.
1️⃣ 정규화를 하는 이유
정규화의 가장 큰 목적은 이상 현상 방지이다.
이상 현상이란 데이터를 입력, 수정, 삭제할 때 발생할 수 있는 문제를 말한다.
대표적인 이상 현상은 다음과 같다.
| 구분 | 설명 |
| 삽입 이상 | 데이터를 추가하려고 할 때 불필요한 데이터까지 함께 입력해야 하는 문제 |
| 수정 이상 | 중복된 데이터 중 일부만 수정되어 데이터가 불일치하는 문제 |
| 삭제 이상 | 데이터를 삭제했을 뿐인데 필요한 정보까지 함께 사라지는 문제 |
즉, 정규화는 이런 문제를 줄이기 위해 테이블을 적절하게 분리하는 과정이다.
2️⃣ 정규화의 결과
정규화를 하면 다음과 같은 결과가 나타날 수 있다.
🔹 입력 / 수정 / 삭제 성능 향상
정규화를 통해 중복 데이터가 줄어들면, 데이터를 입력 / 수정 / 삭제할 때 처리해야 할 데이터가 줄어든다.
따라서 데이터의 입력 / 수정 / 삭제 성능이 향상될 수 있다.
🔹 조회 성능 하락 가능성
정규화를 하면 하나의 테이블이 여러 테이블로 분리된다.
이 때 분리된 데이터를 다시 함께 조회하려면 여러 테이블을 연결하는 조인(Join)이 필요하다.
조인이 많아지면 조회 과정이 복잡해질 수 있으므로 조회 성능이 하락할 가능성이 있다.
다만, 정규화를 한다고 해서 무조건 조회 성능이 하락하는 것은 아니다.
테이블 구조, 데이터 양, 인덱스, SQL 작성 방식에 따라 달라질 수 있다.
3️⃣ 정규화와 성능의 관계
정규화는 성능을 무조건 좋게 만들거나, 무조간 나쁘게 만드는 작업이 아니다.
상황에 따라 성능에 미치는 영향이 달라진다.
🔹 정규화로 조회 성능이 하락하는 경우
정규화를 하면 테이블이 여러 개로 분해된다.
이렇게 분해된 테이블의 데이터를 한 번에 조회하려면 여러 테이블을 조인해야 한다.
이 때 조인이 많아지거나 조회해야 할 데이터가 많아지면 조회 성능이 하락할 수 있다.
🔹 정규화를 통해 시스템 성능이 향상되는 경우
정규화를 하면 중복 데이터가 줄어든다.
중복 데이터가 줄어들면 불필요한 입력 / 수정 / 삭제 작업도 줄어들기 때문에 전체적인 시스템 성능이 향상될 수 있다.
2-2. 정규화 절차
정규화는 단계별로 진행된다.
SQLD에서는 주로 제1정규형, 제2정규형, 제3정규형을 중심으로 이해하면 된다.
| 정규화 단계 | 핵심내용 |
| 제1정규화 | 릴레이션의 속성값이 모두 원자값만으로 구성되어야 한다. - 중복값을 제거한다. - 기본키를 설정한다. ➜ 유사한 속성이 반복되는 경우를 제거해야 한다. ➜ 하나의 속성에는 하나의 값만 들어가도록 한다. |
| 제2정규화 | 기본키가 2개 이상의 속성으로 이루어진 경우 부분 함수종속성을 제거한다, ➜ 기본키가 여러 개일 때, 기본키의 일부에만 종속되는 속성을 분리한다. |
| 제3정규화 | 기본키를 제외한 칼럼 간의 종속성을 제거한다. 이행 함수종속성을 제거한다. ➜ 기본키가 아닌 일반 속성 간의 종속성을 제거한다. |
| BCNF | 기본키를 제외하고 후보키가 있는 경우 후보키가 기본키를 종속시키면 분해한다. ➜ 결정자가 후보키가 아닌 경우 분리한다. |
1️⃣ 제1정규화(비정규형 -> 1차 정규형)
하나의 속성이 여러 속성값을 갖거나 하나의 테이블에 유사한 속성이 반복될 때 이를 별도 테이블로 분리하는 과정이다.
핵심은 하나의 속성은 반드시 하나의 속성값만 가져야 한다는 것이다.

📌 제1정규화 핵심
- 하나의 속성에는 하나의 값만 들어가야 한다.
- 반복되는 속성이나 중복되는 값을 제거한다.
- 유사한 속성이 반복되는 경우 별도 테이블로 분리한다
- PK와 일반속성이 1:1이 되게 분리하며, 이렇게 분리된 두 테이블은 1:M의 관계를 가진다.
✔️ 정규화와 정규형
정규화를 통해 정규형을 만든다.
2️⃣ 제2정규화(1차정규형 -> 2차정규형)
(복합식별자의 경우)일반 속성이 주식별자의 일부에만 종속성을 갖는 부분 함수종속성을 제거하는 것이다.
즉, 복합식별자 중 일부에만 의존하는 일반 속성을 찾아 별도의 테이블로 분리하는 과정이다.
✔️복합식별자(혹은 복합키)
기본키가 2개 이상의 속성으로 이루어진 경우를 말한다.

📌 제2정규화 핵심
- 기본키가 하나일 때는 보통 제2정규화 문제가 발생하지 않는다.
- 일반 속성이 기본키 전체가 아니라 일부에만 종속되면 분리한다.
- 반복되는 속성이나 중복되는 값을 제거한다.
3️⃣ 제3정규화(2차 정규형 -> 3차 정규형)
주식별자가 아닌 일반 속성 간에 함수종속성이 존재하는 이행 함수종속성을 제거하는 과정이다.
✔️ 이행함수종속성
A가 B를 결정하고, B가 C를 결정하면 A가 C를 결정한다.

📌 제3정규화 핵심
- 일반 속성 간의 종속성을 제거한다.
- 기본키가 아닌 속성이 다른 일반 속성을 결정하면 분리한다.
- 이행 함수 종속성을 제거하는 단계이다.
📝 요약정리
| 기본키(PK) |
| 일반속성1 일반속성2 일반속성3 일반속성4 일반속성5 |
- BCNF : 일반속성이 기본키를 정의하는 경우
- 제3정규화 : 일반속성1이 일반속성2를 결정하는 경우 (일반 속성간에 함수종속성이 일어나는 경우)
- 제2정규화 : 기본키가 여러 개일 때, 기본키 A가 일부 일반속성들을 결정하는 경우
🔗 출처
'자격증 > SQLD' 카테고리의 다른 글
| [SQLD][아이리포]08. 정규화 | NULL과의 연산 | 단일행 | 다중행 (0) | 2026.07.04 |
|---|---|
| [SQLD][아이리포]07. 정규화 | 조인 | 슈퍼타입, 서프타입 관계 테이블 병합 (0) | 2026.06.30 |
| [SQLD][아이리포]05. 식별자 | 식별자 관계 | 비식별자 관계 (0) | 2026.06.27 |
| [SQLD][아이리포]03-04. 속성 | 속성과 도메인 | 인스턴스 (0) | 2026.06.22 |
| [SQLD][아이리포]02. 엔터티 | 엔터티의 개념과 특징 | 데이터모델링 (0) | 2026.06.21 |