문서 읽는 데 35분 · 28강 · 3과목 · 데이터베이스 구축

데이터베이스 설계와 정규화

목차 21
전체 59강 중 28강 · 3과목 · 데이터베이스 구축

정규화는 이상현상(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) — 공통 속성이 한쪽의 키여야 함 / 분해 ≠ 무손실 분해
  • 정규화(무결성) ↔ 역정규화(조회 성능) = 트레이드오프
전체 목록 필기 이론

합격까지

정처기, 혼자 막막하다면

초개인화 학습앱 Klue와 에듀윌 온라인강의로 합격까지 이어가세요.