[DB] 이상현상과 정규화

do_it·2025년 11월 5일

database

목록 보기
8/11

1. 정규화(Normalization)

1-1. 정규화란 무엇인가?

DB 설계는 데이터의 중복을 최소화하고, 일관성 & 무결성을 유지하기 위한 기본 과정이고, 정규화는 이 설계의 핵심 기법임.

정규화?

데이터의 일관성 확보 및 중복을 최소화하기 위해 테이블을 구조화하는 과정

1-2. 이상 현상

DB가 잘못 설계되어 데이터가 중복적으로 쌓여있으면, 데이터를 다룰 때 심각한 문제가 발생함

정규화되지 않은 테이블에서 자주 발생하는 문제를 ‘이상현상’이라 부름

삽입 이상 (Insertion Anomaly)

불필요한 데이터 없이는 삽입이 불가능한 문제

갱신 이상 (Update Anomaly)

동일한 데이터가 여러 곳에 중복 저장되어, 수정할 때 일부만 수정되고 일부는 누락되는 현상

삭제 이상 (Deletion Anomaly)

특정 데이터를 삭제했을 때, 필요한 정보까지 함께 삭제되는 문제

1-3. 정규화 목적과 필요성

  • 중복 최소화
  • 데이터 무결성 향상
  • 구조적 일관성 확보
  • 쿼리 성능 & 유지보수 용이성 확보

2. 정규화를 위한 핵심 개념: 함수 종속성과 키

1) 함수 종속성 (FD, Functional Dependency)

하나의 속성이 다른 속성의 값을 고유하게 결정짓는 관계

  • 정의: A가 B를 결정한다 A → B
    특정 속성이 다른 속성 값을 결정하는 관계
    (e.g. 학생ID학생이름)

함수 종속성의 종류

1) 완전 함수 종속 (Full Functional Dependency)

복합키 전체에 의해 다른 속성이 결정되는 경우

  • (학생 ID, 과목코드) → 성적
    성적은 학생 ID, 과목코드 모두 필요

2) 부분적 함수 종속 (Partial Functional Dependency)

복합키 일부만으로 다른 속성이 결정되는 경우

  • (학생 ID, 과목코드) → 학생 이름
    학생 이름은 학생 ID에만 종속되어 있으므로, 복합키 전체에 종속되지 않음

3) 이행적 종속 (Transitive Functional Dependency)

A → B, B → C이면 A → C 관계가 성립하는 경우

  • 학번 → 학과 코드, 학과코드 → 학과명
    학번 → 학과명 (이행적 종속)

함수 종속성 & 정규화의 관계

정규형제거 대상관련된 함수 종속성
1NF비원자값-
2NF부분 함수 종속복합키의 일부 종속
3NF이행적 함수 종속A → B → C 구조
BCNF비후보키 결정자모든 결정자가 후보키여야 함
4NF다중값 종속독립적 다대다 관계
5NF조인 종속조인 시 중복 발생 제거

정규화는 함수 종속성을 분석하고, 그 관계를 기준으로 테이블을 분리하는 과정을 수행함.

2) 키

정규화의 모든 단계는 결국 어떤 속성이 어떤 키에 종속되는가를 기준으로 판단하기 때문에 키는 정규화의 축이라고 할 수 있음

후보키 (Candidate Key)

  • 한 릴레이션에서 각 튜플(행)을 유일하게 식별할 수 있는 최소 속성 집합
  • 여러 개 존재할 수 있음
  • e.g. (주민등록번호), (이메일), (전화번호) — 모두 유일하다면 후보키

기본키 (Primary Key)

  • 후보키 중에서 대표로 선택된 하나의 키
  • NULL이거나 중복될 수 없음
  • 데이터 무결성의 중심이 되는 키

대체키 (Alternate Key)

  • 후보키 중 기본키로 선택되지 않은 나머지 키
  • e.g. 이메일이나 전화번호를 대체키로 설정 가능

외래키 (Foreign Key)

  • 다른 테이블의 기본키를 참조하는 속성
  • 테이블 간의 관계(Relationship) 를 표현
  • e.g. 주문.회원ID회원.회원ID

정규화 & 키

개념정규화에서의 역할
후보키종속 관계의 기준 (결정자 판단 근거)
기본키테이블의 중심 식별자, 완전 종속의 기준
외래키테이블 간 종속 관계 표현
정규화키를 기준으로 비정상 종속을 제거하는 과정

정규화는 속성들이 키에 대해 어떻게 종속되어 있는가를 기준으로 단계가 나뉨

함수 종속성을 판단하려면 먼저 기준 키가 명확해야 함

3. 정규형 (Normal Forms) 단계별 이해

테이블에 존재하는 불필요한 종속성을 제거해 중복과 이상(anomalies)을 줄이는 단계별 규칙이자 레벨

각 정규형은 ‘어떤 종류의 종속을 없애야 하는가?’로 정의되고, 해당 정의를 만족시키지 못하면 테이블을 분해하여 해결함.

  • 1NF (원자값) ⊂ 2NF (부분 중복 제거) ⊂ 3NF (간접 중복 제거) ⊂ BCNF (모든 결정자=후보키)
  • 정규화의 장단점
    • 장점: '이상 현상'이 제거되고, '데이터 중복'이 최소화되어 무결성 보장
    • 단점: 테이블 분리로 인한 JOIN 연산 증가로 성능 저하 가능성
  • 비정규화(Denormalization)
    능 향상을 위해 의도적으로 중복을 허용하거나 정규형을 낮추는 전략

1) 제1 정규형 (1NF) - 원자성 (Atomicity)

테이블의 모든 속성 값이 원자값(Atomic Value)을 가져야 함.

반복 그룹, 배열, 리스트와 같은 비원자 값을 허용하지 않음.
하나의 컬럼에 여러 값이 포함될 수 없음 - "축구, 농구" (X)

학생(학번, 이름, 전화번호): (1001, '홍', '010-1111-2222,010-3333-4444')  → 1NF 위반

2. 제2 정규형 (2NF) - 부분 중복 제거

1NF를 만족하고, 부분 함수 종속이 제거되어야 함.

복합키의 일부에만 종속되는 속성이 있어서는 안 됨

수강(학번, 과목코드, 학생이름, 성적)
기본키 = (학번, 과목코드)
학생이름 → 학번에만 종속  → 부분 종속(2NF 위반)

3. 제 3정규형 (3NF) - 이행적 종속 제거

2NF를 만족하고, 이행적 종속이 제거되어야 함

학생(학번, 학과코드, 학과명)
학번 → 학과코드, 학과코드 → 학과명  → 학번 → 학과명 (이행적 종속)
  • 학생(학번 → 학과코드 → 학과명) → 학과명은 학과코드에만 종속 → 학과 테이블 분리

4. BCNF (Boyce-Codd Normal Form): 강력한 3NF

제3 정규형(3NF)을 만족하고, 모든 결정자가 후보키여야 함.

모든 결정자( 어떤 속성 집합 X가 Y를 결정할 때 X )는 후보키(Candidate Key) 여야 함.

강의(교수, 과목, 강의실)
FD: 과목 → 교수   (한 과목은 특정 교수 전담)
FD: 교수, 과목 → 강의실

과목은 후보키가 아님(과목만으로 행을 식별 못함), 그런데 과목 → 교수 이므로 BCNF 위반

0개의 댓글