데이터베이스 설계와 정규화
목차 21
정규화는 이상현상(Anomaly)을 제거하고 데이터 중복을 줄여 좋은 릴레이션 구조를 만드는 과정이다. 3과목에서 매 회차 1문제 이상 나오는 최빈출 단원 — "이 릴레이션은 몇 정규형인가" 판별이 단골이다.
핵심 암기: 정규화 6단계 도부이결다조(도메인 원자값 1NF·부분 종속 제거 2NF·이행 종속 제거 3NF·결정자=후보키 BCNF·다치 종속 제거 4NF·조인 종속 제거 5NF) · 함수 종속 3종 완전·부분·이행 · 이상현상 3종 삽·삭·갱 · 정규화 위치 = 논리적 설계(23강 요개논물구 '논')
정규화 개요
정규화란 ·정규화 개요·
[정의] 정규화(Normalization) = 이상현상을 제거하고 데이터 중복을 최소화하여 좋은 릴레이션 구조를 만드는 과정. 함수 종속을 분석해 큰 테이블을 작은 테이블로 단계적으로 분해한다.
[표] 정규화의 목적·효과 4가지.
| 효과 | 내용 |
|---|---|
| 이상현상 제거 | 삽입·삭제·갱신 이상 방지 |
| 중복 최소화 | 저장 공간 절약·한 곳만 수정 |
| 일관성 향상 | 중복이 없으니 불일치가 안 생김 |
| 확장 용이 | 새 데이터 추가가 쉬워짐 |
진행 방향 — 1NF → 2NF → 3NF → BCNF → 4NF → 5NF. 앞 단계를 만족해야 다음 단계로 간다.
🔑 암기 정규화 = 이상현상 "제거" (발생이 아님). 목적 문항에서 "이상 발생을 야기" 같은 표현은 무조건 오답. ⚠️ 함정 "정규화는 검색을 빠르게 한다" ❌(→ 오히려 JOIN 증가로 조회는 느려질 수 있음. 정규화의 목적은 무결성·중복 제거) / "정규화하면 성능이 항상 좋아진다" ❌(→ 트레이드오프). 🎯 빈출 "정규화의 목적으로 옳지 않은 것" 형태로 거의 매회. 보기 하나에 "이상 발생을 야기"를 끼워 넣는 게 단골 오답. 💡 보충 주문 시스템에서 가게 이름이 바뀔 때 수십만 건의 주문 레코드를 전부 고쳐야 한다면, 그건 정규화가 안 된 설계다. 정규화는 이런 사고를 처음부터 막는다.
이상현상 (Anomaly) 3종 — 삽·삭·갱 ·정규화 개요·
[정의] 이상현상 = 테이블 설계가 잘못돼 데이터를 넣고·빼고·고칠 때 생기는 부작용. 정규화가 존재하는 이유 그 자체다.
한 테이블에 학생·학과·수강을 다 욱여넣은 경우로 보자.
| 종류 | 내용 | 예시 |
|---|---|---|
| 삽입 이상 | 원치 않는 데이터까지 있어야 삽입 가능 | 학생 없는 신설 학과를 등록하려는데 학번(기본키)이 없어 못 넣음 |
| 삭제 이상 | 한 행 삭제로 의도치 않은 정보까지 소실 | 마지막 학생이 수강 취소 → 그 학과 정보까지 사라짐 |
| 갱신 이상 | 중복된 값을 일부만 고쳐 불일치 발생 | 학과명이 바뀌면 그 학과 학생 행을 전부 고쳐야 하고, 빠뜨리면 불일치 |
🔑 암기 삽·삭·갱 3종, 딱 그것뿐. ⚠️ 함정 "검색 이상"·"조회 이상"·"조인 이상"·"정렬 이상"은 전부 가짜 ❌ — 보기에 이런 단어가 보이면 그게 정답(틀린 것 고르기). / "이상현상은 DBMS 버그" ❌(→ 테이블 설계 잘못이 원인). 🎯 빈출 "이상현상에 해당하지 않는 것"으로 가짜 단어를 골라내는 문제가 빈출. 삽삭갱 외엔 다 오답. 💡 보충 삽입·삭제 이상은 주로 2NF에서, 갱신 이상은 3NF에서 크게 줄어든다.
함수 종속
함수 종속 (FD) ·함수 종속·
[정의] 함수 종속(Functional Dependency, FD) = 속성 X의 값이 정해지면 속성 Y의 값이 유일하게 하나로 결정되는 관계. 표기 X → Y ("X가 Y를 함수적으로 결정").
- X = 결정자(Determinant) — 결정하는 쪽
- Y = 종속자(Dependent) — 결정되는 쪽
학번 → 이름 학번이 정해지면 이름이 하나로 결정 ✅ 종속
학번 → 학과 학번이 정해지면 학과가 하나로 결정 ✅ 종속
(학번, 과목코드) → 성적 두 값이 정해져야 성적이 결정 ✅ 종속
학과 → 학번 한 학과에 학생이 여럿 → 학번 하나로 결정 안 됨 ❌ 종속 아님
이름 → 학번 동명이인 가능 → 학번 하나로 결정 안 됨 ❌ 종속 아님
🔑 암기 결정자(왼쪽)가 정해질 때 오른쪽이 딱 하나로 정해져야 함수 종속. 하나라도 여러 개면 종속 아님. 🎯 빈출 함수 종속 자체보다, 이 개념 위에 선 정규화 단계 판별이 핵심. 결정자·종속자 용어를 직접 묻기도 한다.
함수 종속 3종 — 완전·부분·이행 ·함수 종속·
[정의] 정규화 단계를 가르는 세 가지 함수 종속. 완전→2NF / 부분→2NF 위반 / 이행→3NF 위반의 직결 관계가 시험의 전부다.
[표] 복합 기본키 (학번, 과목코드) 기준.
| 종류 | 정의 | 예시 | 정규화 |
|---|---|---|---|
| 완전 함수 종속 | 복합키 전체가 있어야 결정 | (학번, 과목코드) → 성적 |
2NF 정상 |
| 부분 함수 종속 | 복합키 일부만으로 결정 | 학번 → 학생이름 (과목코드 없어도 결정) |
2NF 위반 |
| 이행 함수 종속 | A→B→C 간접 결정 | 학번 → 학과코드 → 학과명 |
3NF 위반 |
🔑 암기 부분이 사라지면 2NF · 이행이 사라지면 3NF — 도부이결다조와 그대로 매칭.
⚠️ 함정 다치 종속(MVD·X →→ Y·4NF)과 함수 종속(FD·X → Y)을 혼동 ❌. / 단일 기본키 테이블은 자동으로 2NF — 부분 종속이 성립할 수 없기 때문(부분 종속은 복합 키에서만 발생).
🎯 빈출 "다음 종속은 어떤 함수 종속인가" 또는 "부분 함수 종속이 있는 릴레이션의 정규형은"(→ 1NF) 형태로 거의 매회.
암스트롱 공리 ·함수 종속 추론·
[정의] 암스트롱 공리(Armstrong's Axioms) = 함수 종속으로부터 새로운 함수 종속을 추론하는 규칙. 기본 3가지만 알면 충분하다.
| 규칙 | 내용 | 예시 |
|---|---|---|
| 반사(Reflexivity) | Y ⊆ X 이면 X → Y | {학번, 이름} → 학번 |
| 첨가(Augmentation) | X → Y 이면 XZ → YZ | 학번→이름 이면 {학번,나이}→{이름,나이} |
| 이행(Transitivity) | X → Y, Y → Z 이면 X → Z | 학번→학과코드, 학과코드→학과명 이면 학번→학과명 |
⚠️ 함정 X → Y, Y → Z 이면 X → Z 를 묻고 보기에 분해·결합·반사를 섞는다 — 정답은 이행 규칙.
🎯 빈출 이행 규칙이 단독으로 자주 출제. 이행 규칙이 곧 3NF에서 제거하는 이행 함수 종속의 기반이다.
정규화 단계 — 도부이결다조
정규화 6단계 흐름 ·정규화 단계·
[정의] 정규화는 6단계로 진행되며, 각 단계가 제거하는 대상이 다르다. 단계 순서와 제거 대상의 자리 바꿔치기가 매년 출제된다.
[표] ★도부이결다조★ — 한 표로 정복.
| 단계 | 정규형 | 조건 | 제거 대상 |
|---|---|---|---|
| 도 | 1NF | 도메인이 원자값 | 반복 그룹·다중값 속성 |
| 부 | 2NF | 1NF + 부분 함수 종속 제거 | 부분 함수 종속 |
| 이 | 3NF | 2NF + 이행 함수 종속 제거 | 이행 함수 종속 |
| 결 | BCNF | 3NF + 모든 결정자가 후보키 | 후보키 아닌 결정자 |
| 다 | 4NF | BCNF + 다치 종속 제거 | 다치 종속(MVD) |
| 조 | 5NF | 4NF + 조인 종속 제거 | 조인 종속(JD) |
포함 관계 (집합) — 위로 갈수록 엄격(제약 추가), 모든 상위 정규형은 하위를 만족한다.
1NF ⊃ 2NF ⊃ 3NF ⊃ BCNF ⊃ 4NF ⊃ 5NF
느슨 ◄──────────────────────────────► 엄격
(모든 5NF 릴레이션은 1NF~4NF도 동시에 만족 = 작은 부분집합)
🔑 암기 도(1)·부(2)·이(3)·결(BC)·다(4)·조(5) 6글자. 단계명을 한 칸씩만 밀어도 오답이 되니 순서를 통째로 외운다. ⚠️ 함정 "BCNF가 3NF보다 약하다" ❌(→ 강하다, 3NF와 4NF 사이) / "1NF 제거 대상=부분 종속" ❌(→ 다중값) / "3NF 제거 대상=다치 종속" ❌(→ 이행 종속) / "5NF=함수 종속 제거" ❌(→ 조인 종속). 🎯 빈출 각 정규형이 제거하는 대상을 고르는 문제, "2NF이면 1NF이다"(✅·상위는 하위 포함) 같은 포함 관계 문제가 단골. 💡 보충 실무는 보통 3NF 또는 BCNF까지만 적용한다. 4·5NF는 학술적 완전성을 위한 단계로, 시험에서도 개념만 묻는다.
제1정규형 (1NF) — 도메인 원자값 ·정규화 단계·
[정의] 1NF = 모든 속성의 도메인이 원자값(Atomic Value) 만으로 구성. 각 칸의 값이 더 못 쪼개는 단일 값이어야 한다. 반복 그룹·다중값 속성이 위반 대상.
[표] 변환 전 (1NF 위반 — 한 칸에 여러 값).
| 학번 | 수강과목 |
|---|---|
| S001 | 수학, 영어, 과학 |
| S002 | 수학, 국어 |
[표] 변환 후 (1NF 만족 — 각 칸에 하나씩).
| 학번 | 수강과목 |
|---|---|
| S001 | 수학 |
| S001 | 영어 |
| S001 | 과학 |
| S002 | 수학 |
| S002 | 국어 |
🔑 암기 도메인 원자값 = 한 칸에 값 하나. 24강 속성 원자성(릴레이션 5대 특성)이 바로 1NF의 출발점이다.
⚠️ 함정 "1NF는 부분 함수 종속을 제거한다" ❌(→ 그건 2NF. 1NF는 다중값/반복 그룹 제거).
🎯 빈출 수강과목1·수강과목2·수강과목3 같은 반복 그룹을 한 컬럼으로 합치는 변환 → "어떤 정규화 작업인가" → 1NF.
💡 보충 회원 테이블의 관심사 컬럼에 "음악,영화,여행"을 한 칸에 넣으면 1NF 위반 — 검색·수정이 매우 어려워진다.
제2정규형 (2NF) — 부분 함수 종속 제거 ·정규화 단계·
[정의] 2NF = 1NF를 만족하고, 부분 함수 종속을 제거한 정규형. 복합 기본키의 일부에만 종속되는 속성을 별도 테이블로 분리한다.
[표] 변환 전 (2NF 위반 — PK=(학번, 과목코드)). 학번 → 이름 이 부분 종속이라 이름이 중복된다.
| 학번(PK) | 과목코드(PK) | 이름 | 성적 |
|---|---|---|---|
| S001 | C01 | 김민준 | A |
| S001 | C02 | 김민준 | B |
[표] 변환 후 (2NF 만족 — 학생 / 수강 테이블로 분리). 부분 종속 속성(이름)을 결정자(학번)와 함께 떼어냈다.
학생 테이블
| 학번(PK) | 이름 |
|---|---|
| S001 | 김민준 |
| S002 | 이서연 |
수강 테이블
| 학번(PK,FK) | 과목코드(PK) | 성적 |
|---|---|---|
| S001 | C01 | A |
| S001 | C02 | B |
🔑 암기 부분 종속 속성(이름)을 그 결정자(학번)와 함께 떼어내 별도 테이블로 분리.
⚠️ 함정 "단일 기본키인데 2NF 위반이다" ❌ — 단일 키는 부분 종속이 불가능해 자동으로 2NF.
🎯 빈출 (학번, 과목코드) PK에서 학번 → 학생이름 같은 부분 종속을 주고 "위반하는 정규형은" → 2NF.
제3정규형 (3NF) — 이행 함수 종속 제거 ·정규화 단계·
[정의] 3NF = 2NF를 만족하고, 이행 함수 종속(A→B→C) 을 제거한 정규형. 기본키가 아닌 속성이 또 다른 비키 속성을 결정하면 안 된다.
[표] 변환 전 (3NF 위반 — PK=학번). 학번 → 학과코드 → 학과명 이행 종속이라 학과명이 중복된다.
| 학번(PK) | 이름 | 학과코드 | 학과명 |
|---|---|---|---|
| S001 | 김민준 | CS | 컴공 |
| S003 | 박지호 | CS | 컴공 |
[표] 변환 후 (3NF 만족 — 학생 / 학과 테이블로 분리). 이행 종속 속성(학과명)을 결정자(학과코드)와 함께 떼어냈다.
학생 테이블
| 학번(PK) | 이름 | 학과코드(FK) |
|---|---|---|
| S001 | 김민준 | CS |
| S003 | 박지호 | CS |
학과 테이블
| 학과코드(PK) | 학과명 |
|---|---|
| CS | 컴공 |
🔑 암기 이행 종속 속성(학과명)을 그 결정자(학과코드)와 함께 별도 테이블로 분리.
⚠️ 함정 "3NF는 다치 종속을 제거한다" ❌(→ 그건 4NF. 3NF는 이행 종속 제거).
🎯 빈출 학번 → 부서코드 → 부서명 류의 이행 종속을 주고 "위반/만족하는 정규형은" → 2NF만 만족(=3NF 위반).
BCNF (보이스/코드 정규형) — 결정자=후보키 ·정규화 단계·
[정의] BCNF(Boyce-Codd Normal Form) = 3NF를 만족하고, 모든 결정자가 후보키인 정규형. 3NF보다 엄격해 "결정자이면서 후보키가 아닌 속성"을 제거한다. (후보키 = 유일성+최소성을 만족하는 키 — 24강 슈후기대외 '후')
3NF는 만족하지만 BCNF는 아닌 고전 예 — 한 과목을 여러 교수가 담당하고, 한 교수는 한 과목만 담당.
[표] PK=(학생ID, 과목).
| 학생ID | 과목 | 담당교수 |
|---|---|---|
| S001 | 수학 | 김교수 |
| S002 | 물리 | 이교수 |
함수 종속 분석:
(학생ID, 과목) → 담당교수← 기본키담당교수 → 과목← 결정자인데 후보키가 아님 ❌ → BCNF 위반- 분해 →
(학생ID, 담당교수)+(담당교수, 과목)
🔑 암기 "모든 결정자는 반드시 후보키여야 한다." = BCNF 정의 그 자체. ⚠️ 함정 "BCNF는 3NF보다 약하다" ❌(→ 강하다) / "BCNF 분해는 함수 종속을 항상 보존한다" ❌(→ 함수 종속 보존이 안 될 수 있음. 단 무손실 분해는 보장). 🎯 빈출 "릴레이션 R의 모든 결정자가 후보키이면 어떤 정규형인가" → BCNF. 정의 직매칭으로 거의 매회.
제4정규형·제5정규형 — 다치·조인 종속 ·정규화 단계·
[정의] BCNF 위쪽 두 단계. 시험은 개념과 제거 대상만 묻는다(깊은 계산 출제 없음).
| 정규형 | 조건 | 제거 대상 |
|---|---|---|
| 4NF | BCNF + 다치 종속 제거 | 다치 종속(MVD) X →→ Y — X의 값에 Y가 여러 값 집합으로 결정 |
| 5NF | 4NF + 조인 종속 제거 | 조인 종속(JD) — 분해 후 다시 조인하면 원본 복원(무손실) |
🔑 암기 다치(4NF) · 조인(5NF) — 도부이결다조의 마지막 두 글자. ⚠️ 함정 "4NF=조인 종속 제거" ❌(→ 다치 종속) / "5NF=다치 종속 제거" ❌(→ 조인 종속). 🌟 합격 한 끗 4·5NF는 이름과 제거 대상만 기억하면 충분. 실무·시험 모두 BCNF까지가 중심이다.
정규화 설계 원리
정규화 위치 = 논리적 설계 ·정규화 설계·
[정의] 정규화는 DB 설계 5단계(요개논물구 — 23강) 중 세 번째 '논(논리적 설계)' 에서만 수행한다.
요구 분석 → 개념적 설계 → [논리적 설계] → 물리적 설계 → 구현
(요) (개) (논)★정규화★ (물) (구)
E-R→테이블 매핑 후 함수 종속 분석
- 개념적 설계 — DBMS 독립·추상적이라 함수 종속 분석 불가
- 물리적 설계 — 저장 구조(인덱스·응답시간) 단계라 분해 작업 의미 없음
- 논리적 설계 — E-R을 테이블로 매핑한 뒤 함수 종속을 분석해 분해 가능
🔑 암기 보기에 "정규화" + "설계 단계" 가 같이 나오면 100% 논리적 설계. ⚠️ 함정 "정규화는 물리적 설계에서 수행" ❌(→ 논리적) / "개념적·요구분석·구현 단계" 모두 ❌. 🎯 빈출 정규화 위치는 단독 문항으로 자주. 23강 짝꿍 — 정규화=논리적 / 응답시간·저장공간=물리적 / E-R=개념적.
무손실 분해 (Heath의 정리) ·정규화 설계·
[정의] 무손실 분해(Lossless Join Decomposition) = 분해한 테이블을 자연 조인하면 원본과 정확히 일치하는 분해. 반대로 손실 분해는 조인 시 원본에 없던 가짜 튜플(spurious tuple)이 생긴다.
[표] 무손실 vs 손실.
| 구분 | 자연 조인 결과 |
|---|---|
| 무손실 분해 | 원본과 정확히 일치 ✅ |
| 손실 분해 | 원본에 없던 가짜 튜플 발생 ❌ |
무손실 조건(Heath의 정리) — R을 R1, R2로 분해할 때 공통 속성이 R1 또는 R2의 키(후보키) 여야 한다.
🔑 암기 공통 속성이 분해된 한쪽의 키여야 무손실. 정규화는 항상 무손실 분해를 보장하도록 설계된다.
⚠️ 함정 "분해 = 무손실 분해" ❌(→ 무손실은 분해의 한 종류일 뿐, 잘못 쪼개면 손실 분해).
💡 보충 25강 자연조인 차수 회수 — R1 ⋈ R2의 차수 = R1 + R2 − 공통 속성 수. 공통 속성으로 정확히 이어 붙어야 원본이 복원된다.
역정규화
역정규화 (Denormalization) ·역정규화·
[정의] 역정규화(반정규화, Denormalization) = 조회 성능 향상을 위해 의도적으로 정규화를 일부 해제(중복 허용)하는 기법. 정규화의 단점을 보완하는 전략적 선택이다.
[표] 정규화 단점(역정규화의 동기) ↔ 역정규화 기법.
| 정규화 단점 | 역정규화 기법 |
|---|---|
| JOIN 증가·조회 느려짐 | 자주 JOIN하는 두 테이블 합치기 |
| 쿼리 복잡도 증가 | 자주 조회하는 컬럼을 다른 테이블에 중복 추가 |
| 집계 비용 큼 | 계산 결과를 미리 저장(파생 컬럼) |
실무 원칙 — 일단 3NF까지 정규화 → 성능 측정 → 병목만 선택적으로 역정규화. 처음부터 미정규화는 안티패턴.
🔑 암기 정규화 = 무결성·중복 제거 / 역정규화 = 조회 성능 — 둘은 트레이드오프. ⚠️ 함정 "정규화는 항상 성능을 향상시킨다" ❌(→ JOIN 증가로 조회는 느려질 수 있음) / "역정규화 = 잘못된 설계" ❌(→ 의도적·전략적 선택). 🎯 빈출 정규화 단점(JOIN 증가)과 역정규화의 목적(조회 성능)을 묻는 문제. "중복 허용 = 이상현상 가능성 증가"라는 트레이드오프가 포인트. 💡 보충 상품 테이블에 공급사명을 중복 저장하거나, 가게 테이블에 리뷰 수 컬럼을 따로 두고 리뷰가 달릴 때마다 갱신하는 것이 대표적인 역정규화다 — COUNT를 매번 돌리지 않아 조회가 빨라진다.
기출 다지기
[기출 1 출제] 정규화의 목적으로 옳지 않은 것은? (정규화 목적)
- ① 어떠한 릴레이션이라도 데이터베이스 내에서 표현 가능하게 만든다.
- ② 데이터 삽입 시 릴레이션을 재구성할 필요성을 줄인다.
- ③ 중복을 배제하여 삽입·삭제·갱신 이상의 발생을 야기한다.
- ④ 효과적인 검색 알고리즘을 생성할 수 있다.
정답 및 해설 보기
정답 ③
정규화는 이상현상을 제거하는 것이지 발생을 야기하는 것이 아니다.
| 보기 | 판정 | 이유 |
|---|---|---|
| ① | ✅ | 모든 릴레이션을 표현 가능하게 함 — 정규화 목적 |
| ② | ✅ | 삽입 시 재구성 필요성 감소(삽입 이상 제거) |
| ③ | ❌ | 정규화는 이상을 제거 — "야기"는 정반대 → 정답 |
| ④ | ✅ | 효과적 검색 알고리즘 생성 — 정규화 효과 |
🔑 암기 정규화 = 이상현상 제거(발생 아님).
[기출 2 출제] 다음과 같이 변환했을 때 어떤 정규화 작업인가? (정규형 식별)
[변환 전] 수강(학번, 이름, 수강과목1, 수강과목2, 수강과목3)
↓
[변환 후] 수강(학번, 이름, 수강과목)
- ① 제1정규형(1NF)
- ② 제2정규형(2NF)
- ③ 제3정규형(3NF)
- ④ BCNF
정답 및 해설 보기
정답 ①
변환 전 수강과목1·2·3 = 반복 그룹(원자값 위반) → 한 컬럼으로 통합해 도메인 원자값 확보 = 1NF.
도부이결다조의 첫 글자 도 = 도메인 원자값 = 1NF.
🔑 암기 반복 그룹·다중값 제거 = 1NF.
[기출 3 출제] 릴레이션 R의 모든 결정자(Determinant)가 후보키이면 R은 어떤 정규형인가? (BCNF 정의)
- ① 제1정규형
- ② 제2정규형
- ③ 보이스/코드 정규형(BCNF)
- ④ 제4정규형
정답 및 해설 보기
정답 ③
"모든 결정자가 후보키"는 BCNF의 정의 그 자체다.
| 보기 | 판정 | 핵심 |
|---|---|---|
| ① 1NF | ❌ | 도메인 원자값 |
| ② 2NF | ❌ | 부분 함수 종속 제거 |
| ③ BCNF | ✅ | 모든 결정자가 후보키 → 정답 |
| ④ 4NF | ❌ | 다치 종속 제거 |
🔑 암기 "모든 결정자는 반드시 후보키" = BCNF.
[기출 4 출제] 다음에 해당하는 함수 종속 추론 규칙은? (암스트롱 공리)
X → Y 이고 Y → Z 이면 X → Z 가 성립한다.
- ① 분해 규칙
- ② 이행 규칙
- ③ 반사 규칙
- ④ 결합 규칙
정답 및 해설 보기
정답 ②
X → Y → Z 로 전달(이행)되는 규칙 = 이행 규칙(Transitivity).
- 반사 규칙 — Y ⊆ X 이면 X → Y
- 첨가 규칙 — X → Y 이면 XZ → YZ
- 이행 규칙 — X → Y, Y → Z 이면 X → Z ← 이것
🔑 암기 이행 규칙은 3NF에서 제거하는 이행 함수 종속의 기반.
[기출 5 출제] 제2정규형(2NF)에 대한 설명으로 옳은 것은? (2NF 조건)
- ① 릴레이션이 원자값으로만 구성된 정규형이다.
- ② 기본키에 대해 완전 함수 종속인 정규형이다.
- ③ 이행 함수 종속을 제거한 정규형이다.
- ④ 모든 결정자가 후보키인 정규형이다.
정답 및 해설 보기
정답 ②
2NF = 부분 함수 종속 제거 = 기본키에 완전 함수 종속.
| 보기 | 판정 | 정규형 |
|---|---|---|
| ① 원자값 | ❌ | 1NF(도) |
| ② 완전 함수 종속 | ✅ | 2NF(부) → 정답 |
| ③ 이행 종속 제거 | ❌ | 3NF(이) |
| ④ 결정자=후보키 | ❌ | BCNF(결) |
🔑 암기 2NF = 부분 종속 제거 = 기본키에 완전 함수 종속.
[기출 6 출제] 다음 릴레이션이 위반하는 정규형은? (정규형 판별)
수강(학번, 과목코드, 학생이름, 성적) PK=(학번, 과목코드)
함수 종속: 학번 → 학생이름
- ① 제1정규형(1NF)
- ② 제2정규형(2NF)
- ③ 제3정규형(3NF)
- ④ BCNF
정답 및 해설 보기
정답 ②
복합 기본키 (학번, 과목코드) 인데 학번 → 학생이름 = 부분 함수 종속(학번만으로 결정).
- 1NF — 원자값 만족 ✅
- 2NF — 부분 함수 종속 존재 → 위반 ❌ → 정답
- 분리:
수강(학번 FK, 과목코드 FK, 성적)+학생(학번 PK, 학생이름)
🔑 암기 복합키 일부에만 종속 = 부분 종속 = 2NF 위반.
[기출 7 출제] 데이터베이스 설계 단계 중 정규화를 수행하는 단계는? (정규화 위치)
- ① 요구 조건 분석
- ② 개념적 설계
- ③ 논리적 설계
- ④ 물리적 설계
정답 및 해설 보기
정답 ③
정규화는 E-R을 테이블로 매핑한 뒤 함수 종속을 분석해 분해하는 작업 → 논리적 설계 단계.
| 보기 | 판정 | 핵심 활동 |
|---|---|---|
| ① 요구 분석 | ❌ | 요구사항 수집 |
| ② 개념적 설계 | ❌ | E-R 다이어그램 |
| ③ 논리적 설계 | ✅ | 테이블 매핑·정규화 → 정답 |
| ④ 물리적 설계 | ❌ | 인덱스·저장 구조·응답시간 |
🔑 암기 정규화 = 논리적 / 응답시간 = 물리적 / E-R = 개념적.
[기출 8 출제] 이상현상(Anomaly)에 해당하지 않는 것은? (이상현상 종류)
- ① 삽입 이상
- ② 삭제 이상
- ③ 검색 이상
- ④ 갱신 이상
정답 및 해설 보기
정답 ③
이상현상은 삽입·삭제·갱신 3종뿐. "검색 이상"은 존재하지 않는 가짜 용어다.
| 보기 | 판정 |
|---|---|
| ① 삽입 이상 | ✅ 실제 |
| ② 삭제 이상 | ✅ 실제 |
| ③ 검색 이상 | ❌ 가짜 → 정답 |
| ④ 갱신 이상 | ✅ 실제 |
🔑 암기 삽·삭·갱 외엔 다 가짜(검색·조회·조인·정렬 이상 ❌).
한 장 요약
정규화 6단계 — 도부이결다조
| 도 | 부 | 이 | 결 | 다 | 조 |
|---|---|---|---|---|---|
| 1NF | 2NF | 3NF | BCNF | 4NF | 5NF |
| 도메인 원자값 | 부분 종속 제거 | 이행 종속 제거 | 결정자=후보키 | 다치 종속 제거 | 조인 종속 제거 |
함수 종속 3종 — 완전(복합키 전체·2NF 정상) / 부분(복합키 일부·2NF 위반) / 이행(A→B→C·3NF 위반)
이상현상 3종 — 삽입·삭제·갱신 (검색·조회·조인·정렬 이상은 가짜)
암스트롱 공리 — 반사 / 첨가 / 이행 (이행 규칙이 빈출)
핵심 한 줄
- 포함 관계 — 1NF ⊃ 2NF ⊃ 3NF ⊃ BCNF ⊃ 4NF ⊃ 5NF (위로 갈수록 엄격, 상위는 하위 만족)
- 단일 기본키 → 자동으로 2NF (부분 종속 불가)
- BCNF = 모든 결정자가 후보키 (3NF < BCNF < 4NF)
- 정규화 위치 = 논리적 설계 (정규화=논리적 / 응답시간=물리적 / E-R=개념적)
- 무손실 분해(Heath) — 공통 속성이 한쪽의 키여야 함 / 분해 ≠ 무손실 분해
- 정규화(무결성) ↔ 역정규화(조회 성능) = 트레이드오프
