본문 바로가기
sqld

정규화의 형태에대해 알아보자

by 자격증원톱 2026. 2. 20.
반응형

정규화의 형태에대해 알아보자

반응형

 

1) 1NF(제1정규형): “한 칸에는 값 1개”

핵심 규칙

  • 속성(컬럼)은 하나의 값만 가져야 합니다.
  • 한 컬럼에 “전화번호 2개”처럼 여러 값이 들어가면 1NF 위반입니다.

예시(전화번호)

(위반)

고객번호 이름 전화번호
31 홍길동 010-1234-1234, 010-1234-5678

(해결 1) 행으로 풀기

고객번호 이름 전화번호
31 홍길동 010-1234-1234
31 홍길동 010-1234-5678

그런데 이렇게 하면 이름이 중복되죠?
그래서 보통 더 깔끔하게는

(해결 2) 테이블 분리(정석)

  • 고객(고객번호, 이름)
  • 고객전화(고객번호, 전화번호순번, 전화번호)

2) 2NF(제2정규형): “부분 종속 제거”

핵심 규칙

  • 1NF를 만족하면서,
  • 일반 속성은 ‘전체 기본키’에 완전히 의존해야 합니다.
  • 즉, 복합키(키가 2개 이상)일 때 한쪽 키에만 의존하는 컬럼이 있으면 2NF 위반입니다.

예시(주문내역)

주문내역 테이블의 키가 (주문번호, 상품번호)라고 해봅시다.

주문번호(PK) 상품번호(PK) 상품명
O1 P1 노트북
O1 P2 핸드폰

여기서 상품명은 상품번호만 알면 결정됩니다.
즉,

  • 상품번호 → 상품명
    이건 (주문번호, 상품번호) “전체”가 아니라 부분(상품번호)에 의존 → 부분 종속 → 2NF 위반

해결(분리)

  • 주문내역(주문번호, 상품번호)
  • 상품(상품번호, 상품명)

3) 3NF(제3정규형): “이행 종속 제거”

핵심 규칙

  • 2NF를 만족하면서,
  • 키가 아닌 속성이 다른 키 아닌 속성에 의존하면 안 됨
  • 즉, “A(키) → B(일반) → C(일반)” 같은 연쇄 의존(이행 종속)을 제거합니다.

예시(주문 테이블에 고객등급이 같이 있는 경우)

주문번호(PK) 고객번호 고객등급 ID 고객등급명
C 1234 1 VIP1

의존 관계를 보면

  • 고객번호 → 고객등급ID
  • 고객등급ID → 고객등급명
    그래서 결과적으로 고객번호 → 고객등급명(간접)
    이게 이행 종속이라 3NF 위반입니다.

해결(분리)

  • 주문(주문번호, 고객번호)
  • 고객(고객번호, 고객등급ID)
  • 고객등급(고객등급ID, 고객등급명)

4) 2NF/3NF를 안 하면 생기는 대표 문제(이상 현상)

이미지에 나온 요지는 “중복 때문에 꼬인다”입니다.

  • 수정 이상: 상품명 바뀌었는데 주문내역 여러 줄을 다 수정해야 함
  • 삽입 이상: 상품 정보만 먼저 넣고 싶은데 주문이 없으면 넣기 애매
  • 삭제 이상: 마지막 주문을 지우면 상품 정보/고객등급 정보까지 같이 사라질 수 있음

정규화는 이걸 막습니다.


5) BCNF / 4NF / 5NF는 뭐냐? (아주 쉽게)

이미지의 마지막은 “1~3NF로 대부분 끝나지만, 더 복잡하면 확장 정규형이 있다”는 소개입니다.

  • BCNF: 3NF보다 더 엄격한 버전
    • “결정자(왼쪽)가 항상 후보키여야 한다”
    • 예: (교수ID, 과목) 같은 조합에서 “교수ID가 과목을 결정”하는데 교수ID가 후보키가 아니면 문제 → BCNF로 해결
  • 4NF: “다치 종속” 제거
    • 한 사람이 취미도 여러 개, 사용언어도 여러 개
      취미×언어 조합으로 데이터가 폭발적으로 중복됨 → 분리
  • 5NF: “조인 종속” 문제 해결
    • 여러 테이블로 쪼갰다가 다시 조인할 때 중복/손실 없이 복원되는지까지 고려하는 고급 단계

초간단 요약

  • 1NF: 한 칸에 값 1개(리스트 금지)
  • 2NF: 복합키에서 “부분 종속” 제거(상품명은 상품 테이블로)
  • 3NF: “이행 종속” 제거(고객등급명은 등급 테이블로)
  • 대부분 실무는 1~3NF가 기본이고, 더 복잡하면 BCNF/4NF/5NF를 고려
반응형

'sqld' 카테고리의 다른 글

관계와 조인(Join)의 개념  (0) 2026.02.21
반정규화는 무엇인가요?  (0) 2026.02.21
정규화의 개념  (0) 2026.02.20
식별자  (0) 2026.02.19
관계의 개념  (0) 2026.02.19