
💡 1분 핵심 요약 (TL;DR)
- ✅ 이상 현상(anomaly) — 데이터 중복 때문에 삽입·갱신·삭제 시 발생하는 부작용 3종류
- ✅ 함수적 종속성(FD) — "X가 Y를 결정한다(X→Y)", 정규화 판단의 핵심 도구
- ✅ 정규화 — 함수 종속성을 기준으로 릴레이션을 무손실 분해해 이상 현상을 없애는 과정
- ✅ 정규형 단계 — 1NF → 2NF → 3NF → BCNF → 4NF → 5NF, 갈수록 제약조건이 엄격해짐
테이블을 설계하다 보면 "이 속성들을 굳이 나눠야 하나?" 싶을 때가 있습니다. 하지만 관련 없는 속성을 한 테이블에 몰아넣으면 데이터를 넣고 고치고 지울 때마다 예상치 못한 문제가 생깁니다. 이걸 이상 현상이라 부르고, 이 문제를 체계적으로 해결하는 과정이 정규화입니다. 이번 포스팅에서는 이상 현상의 종류부터 함수적 종속성, 그리고 정규형 1단계부터 5단계까지 전체 흐름을 정리했습니다.
01 정규화란? 이상 현상 3가지
데이터 중복이 만드는 삽입·갱신·삭제의 함정
📖 정규화(Normalization)란?
이상(anomaly) 현상을 제거하면서 데이터베이스를 올바르게 설계해나가는 과정입니다. 이상 현상은 불필요한 데이터 중복 때문에 릴레이션에 삽입·수정·삭제 연산을 수행할 때 발생하는 부작용을 말합니다.
아래 이벤트 참여 릴레이션을 기준으로 세 가지 이상 현상을 하나씩 살펴보겠습니다. 고객아이디와 등급이 여러 행에 걸쳐 중복 저장되어 있는 게 문제의 씨앗입니다.
| 고객아이디 | 이벤트번호 | 당첨여부 | 고객이름 | 등급 |
| apple | E001 | Y | 정소화 | gold |
| apple | E005 | N | 정소화 | gold |
| apple | E010 | Y | 정소화 | gold |
| banana | E002 | N | 김선우 | vip |
| banana | E005 | Y | 김선우 | vip |
| carrot | E003 | Y | 고명석 | gold |
| carrot | E007 | Y | 고명석 | gold |
| orange | E004 | N | 김용욱 | silver |
❌ ① 삽입 이상 (insertion anomaly)
새 데이터를 넣으려면 불필요한 데이터도 함께 넣어야 하는 문제입니다. 아직 어떤 이벤트에도 참여하지 않은 신규 고객 melon(성원용, gold)을 위 테이블에 넣으려면 이벤트번호·당첨여부에 실제로 존재하지 않는 임시값(NULL)을 억지로 채워야 합니다. → 삽입 자체가 불가능합니다.
❌ ② 갱신 이상 (update anomaly)
중복된 튜플 중 일부만 변경해서 데이터가 서로 어긋나는 문제입니다. apple의 등급을 gold → vip로 바꿔야 하는데 3개 행 중 한두 개만 수정하면, 같은 고객인데 등급이 gold와 vip로 서로 다르게 남는 모순이 생깁니다.
❌ ③ 삭제 이상 (deletion anomaly)
튜플을 지우면서 꼭 필요한 다른 데이터까지 함께 사라지는 문제입니다. orange 고객이 이벤트 참여를 취소해 그 행(위 표의 초록색 행)을 삭제하면, 이벤트와 무관한 고객아이디·고객이름·등급 정보까지 통째로 손실됩니다.

02 함수적 종속성(FD) — 정규화의 판단 기준
"X가 Y를 결정한다" X→Y
📖 함수적 종속성(Functional Dependency)이란?
릴레이션 내의 모든 튜플에서 하나의 X 값에 대한 Y 값이 항상 하나일 때, "X가 Y를 함수적으로 결정한다"고 하며 X → Y로 표현합니다. 이때 X를 결정자, Y를 종속자라 부르고, "Y가 X에 함수적으로 종속되어 있다"와 같은 의미입니다.
| X (결정자) | → | Y (종속자) |

예) 학생 수강 성적 릴레이션으로 종속 관계를 직접 판단해보겠습니다.
| 학생번호 | 학생이름 | 주소 | 학과 | 학과사무실 | 강좌이름 | 강의실 | 성적 |
| 501 | 박지성 | 영국 맨체스터 | 컴퓨터과 | 공학관 101 | 데이터베이스 | 공학관 110 | 3.5 |
| 401 | 김연아 | 대한민국 서울 | 체육학과 | 체육관 101 | 데이터베이스 | 공학관 110 | 4.0 |
| 402 | 장미란 | 대한민국 강원도 | 체육학과 | 체육관 101 | 스포츠경영학 | 체육관 103 | 3.5 |
| 502 | 추신수 | 미국 클리블랜드 | 컴퓨터과 | 공학관 101 | 자료구조 | 공학관 111 | 4.0 |
| 501 | 박지성 | 영국 맨체스터 | 컴퓨터과 | 공학관 101 | 자료구조 | 공학관 111 | 3.5 |
이 릴레이션에서 성립하는 함수 종속 관계는 다음과 같습니다.
| · 학생번호 → 학생이름 · 학생번호 → 주소 · 강좌이름 → 강의실 · 학과 → 학과사무실 |
※ 학생번호 501이 두 번 등장하지만 학생이름·주소는 항상 같습니다. 반면 성적은 학생번호만으로 결정되지 않으므로(같은 학생도 강좌별로 성적이 다름) 학생번호 → 성적은 성립하지 않습니다.
⚠️ 함수 종속 관계 판단 시 유의 사항
· 속성 값 자체가 아니라 속성의 특성과 의미를 기반으로 판단해야 합니다. 현재 릴레이션에 우연히 들어있는 값만 보고 판단하면 안 됩니다.
· 일반적으로 기본키와 후보키는 릴레이션의 다른 모든 속성을 함수적으로 결정합니다.
· 기본키·후보키가 아니어도 다른 속성 값을 유일하게 결정한다면 함수 종속 관계의 결정자가 될 수 있습니다.
· 결정자와 종속자가 같거나 결정자가 종속자를 포함하는 것처럼 당연한 관계는 고려하지 않습니다 (예 : 고객아이디 → 고객아이디).
03 완전 함수 종속 vs 부분 함수 종속
기본키가 여러 속성으로 묶여 있을 때 특히 중요한 구분
기본키가 두 개 이상의 속성으로 이루어진 복합키일 때는 종속 관계를 좀 더 세밀하게 봐야 합니다. 다시 이벤트 참여 릴레이션(기본키 = {고객아이디, 이벤트번호})으로 살펴보겠습니다.
| · 고객아이디 → 고객이름 · {고객아이디, 이벤트번호} → 당첨여부 · {고객아이디, 이벤트번호} → 고객이름 |
✓ 완전 함수 종속 (FFD, Full Functional Dependency)
속성 집합 Y가 속성 집합 X에 함수적으로 종속되어 있지만, X의 일부분에는 종속되지 않는 경우입니다. 일반적으로 "함수 종속"이라고 하면 완전 함수 종속을 의미합니다.
→ 당첨여부는 {고객아이디, 이벤트번호}에 완전 함수 종속됩니다. (고객아이디만으로는, 이벤트번호만으로는 당첨여부를 결정할 수 없음)
⚠️ 부분 함수 종속 (PFD, Partial Functional Dependency)
속성 집합 Y가 속성 집합 X의 전체가 아닌 일부분에도 함수적으로 종속되는 경우입니다.
→ 고객이름은 {고객아이디, 이벤트번호}에 부분 함수 종속됩니다. 사실은 고객아이디 하나만으로도 고객이름이 결정되기 때문입니다. 바로 이 부분 함수 종속이 앞서 본 삽입·갱신·삭제 이상의 근본 원인이며, 다음 섹션에서 배울 정규화가 제거하려는 대상입니다.
04 정규화의 목표와 정규형 종류
무손실 분해 원칙과 7개의 정규형
📖 정규화(Normalization)
함수 종속성을 이용해 릴레이션을 연관성 있는 속성들로만 구성되도록 분해해서, 이상 현상이 발생하지 않는 올바른 릴레이션으로 만들어 가는 과정입니다. 기본 목표는 관련 없는 함수 종속성을 별개의 릴레이션으로 분리하는 것입니다.
⚠️ 무손실 분해(nonloss decomposition) — 반드시 지켜야 할 원칙
· 릴레이션은 의미상 동등한 릴레이션들로 분해되어야 하며, 분해로 정보 손실이 발생하면 안 됩니다.
· 분해된 릴레이션들을 자연 조인(natural join)하면 분해 전의 릴레이션으로 정확히 복원되어야 합니다.
📖 종속성 보존(Dependency Preservation) — 무손실 분해와 함께 지켜야 할 원칙
릴레이션을 분해한 뒤에도 원래 릴레이션에 존재하던 함수적 종속성(FD)들이 분해된 릴레이션들 내부에서 그대로 유지되어야 한다는 원칙입니다. 정규화는 이 두 원칙, 즉 무손실 조인 분해와 종속성 보존을 함께 만족시키는 것을 이상적인 목표로 합니다.
정규형(Normal Form)은 릴레이션이 정규화된 정도를 나타내며, 각 정규형마다 만족해야 하는 제약 조건이 존재합니다. 아래로 갈수록 더 엄격한 조건을 만족합니다.
|
※ 안쪽으로 들어갈수록 더 엄격한 정규형을 만족하며, 바깥쪽 정규형의 조건을 모두 포함합니다. 릴레이션의 특성을 고려해서 적합한 정규형을 선택하면 되고, 실무에서는 3NF 또는 BCNF까지 정규화하는 경우가 많습니다.

05 제1·2·3 정규형 — 기본 정규형 3단계
원자값 → 완전 함수 종속 → 이행적 함수 종속 제거
| 정규형 | 만족 조건 | 위반 시 제거 대상 |
| 제1정규형 (1NF) |
모든 속성이 더는 분해되지 않는 원자 값(atomic value)만 가짐. 이걸 만족해야 관계형 DB의 릴레이션이 될 자격이 있음 | 다중 값·복합 값 속성 |
| 제2정규형 (2NF) |
1NF를 만족하고, 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속 | 부분 함수 종속 |
| 제3정규형 (3NF) |
2NF를 만족하고, 기본키가 아닌 모든 속성이 기본키에 이행적 함수 종속되지 않음 | 이행적 함수 종속 |
이행적 함수 종속(transitive FD)은 세 속성 집합 X, Y, Z에서 X→Y와 Y→Z가 성립하면 논리적으로 X→Z도 성립하는데, 이때 Z가 X에 '이행적으로' 종속된 상태를 말합니다.
| X | → | Y | → | Z |
예) 학생번호 → 학과, 학과 → 학과사무실이 성립하면 학생번호 → 학과사무실도 성립. 이때 학과사무실은 학생번호에 이행적으로 종속되어 있으므로, 3NF를 만족하려면 학과·학과사무실을 별도 릴레이션으로 분리해야 합니다.
06 BCNF · 제4·5정규형, 그리고 전체 흐름
후보키가 여러 개일 때 필요한 더 엄격한 정규형
📖 보이스/코드 정규형 (BCNF, Boyce/Codd Normal Form)
하나의 릴레이션에 후보키가 여러 개 존재하는 경우, 제3정규형까지 만족해도 이상 현상이 발생할 수 있습니다. 이를 해결하기 위한 강한 제3정규형(strong 3NF)이 BCNF입니다.
→ 릴레이션이 함수 종속 관계에서 모든 결정자가 후보키이면 BCNF에 속합니다.
→ BCNF에 속하는 모든 릴레이션은 3NF에 속하지만, 3NF에 속하는 모든 릴레이션이 BCNF에 속하는 것은 아닙니다.
💡 3NF와 BCNF의 차이가 발생하는 특수 상황
두 정규형의 차이는 릴레이션에 복수의 후보키가 존재하고, 그 후보키들이 여러 속성으로 구성된 복합키일 때 주로 발생합니다. 이때 기본키가 아닌 일반 속성이 복합 후보키의 일부분을 함수적으로 결정해버리는 상황이 생기면, 그 일반 속성은 후보키가 아니면서 결정자가 되어버립니다. 3NF는 이 상황을 걸러내지 못해 통과하지만, BCNF는 "모든 결정자는 후보키여야 한다"는 조건을 위배하므로 탈락합니다.
| 정규형 | 만족 조건 |
| 제4정규형 (4NF) |
BCNF를 만족하면서, 함수 종속이 아닌 다치 종속(MVD; Multi Valued Dependency)을 제거 |
| 제5정규형 (5NF) |
4NF를 만족하면서, 후보키를 통하지 않는 조인 종속(JD; Join Dependency)을 제거 |
지금까지의 내용을 한 흐름으로 이으면, 비정규형 릴레이션이 아래 순서로 다듬어지며 정규화가 진행됩니다.
| 비정규형 | 원자값 분해 → |
1NF | 부분종속 제거 → |
2NF | 이행종속 제거 → |
3NF |
3NF에서 후보키가 아닌 결정자를 제거하면 BCNF, 다치 종속을 제거하면 4NF, 조인 종속을 제거하면 5NF로 이어집니다.
💡 실무 팁 : 반정규화(De-normalization)
정규화가 무조건 정답은 아닙니다. 릴레이션이 너무 많이 분해되면 데이터를 조회할 때마다 여러 테이블을 다시 자연 조인해야 해서 CPU·메모리 부하가 커지고 응답 속도가 떨어질 수 있습니다. 그래서 실무에서는 성능 향상을 위해 중복을 어느 정도 감수하더라도 테이블을 다시 합치는 '반정규화'를 전략적으로 수행하기도 합니다. 정규화가 '정확성'을 위한 이론이라면, 반정규화는 '성능'을 위한 실무적 타협인 셈입니다.

📌 핵심 정리
· 이상 현상 3종류 : 삽입 이상(불필요한 데이터도 함께 삽입), 갱신 이상(일부만 수정돼 모순 발생), 삭제 이상(필요한 데이터까지 함께 삭제)
· 함수적 종속성(FD) : X→Y, 하나의 X 값에 대해 Y 값이 항상 하나 (X=결정자, Y=종속자)
· 완전 함수 종속 vs 부분 함수 종속 : 복합키 전체에 종속되면 완전, 일부에만 종속되면 부분 — 부분 종속이 이상 현상의 원인
· 정규화 : 무손실 분해(정보 손실 없이, 자연 조인으로 복원 가능)와 종속성 보존(분해 후에도 원래의 FD가 유지됨)을 함께 만족시키는 것이 이상적
· 정규형 단계 : 1NF(원자값) → 2NF(완전 함수 종속) → 3NF(이행적 함수 종속 제거) → BCNF(모든 결정자가 후보키) → 4NF(다치 종속 제거) → 5NF(조인 종속 제거)
· 3NF vs BCNF : 복합 후보키가 여러 개 있고 일반 속성이 그 일부를 결정할 때 3NF는 통과하지만 BCNF는 위배됨
· 반정규화 : 과도한 분해로 조인 비용이 커지면, 실무에서는 성능을 위해 의도적으로 중복을 허용하는 반정규화를 적용하기도 함
태그 : 정규화란 이상현상삽입 갱신 삭제 이상함수적 종속성 FD결정자 종속자완전함수종속 부분함수종속이행적 함수 종속제1정규형 제2정규형 제3정규형보이스코드 정규형 BCNF제4정규형 제5정규형무손실 분해종속성 보존3NF BCNF 차이반정규화 De-normalization
'이전 수업 노트 > 데이터베이스 개론' 카테고리의 다른 글
| 12. 보안과 권한 관리 - 접근 제어, GRANT/REVOKE, Role (0) | 2026.07.10 |
|---|---|
| 11. 회복과 병행 - 트랜잭션, 장애와 회복, 병행 제어 (0) | 2026.07.09 |
| 9. 데이터베이스 설계 - 관계 추출, 논리적 설계 규칙, 테이블 명세서 (0) | 2026.07.07 |
| 8. SQL과 DB설계 - INSERT, UPDATE, DELETE, 뷰 (0) | 2026.07.06 |
| 7. 데이터베이스 언어 - DDL, DML, DCL, CREATE, ALTER, DROP (0) | 2026.06.18 |

