본문 바로가기
SQL(데이터베이스)

12. DB 제2정규형(2NF) 제3정규형(3NF)

by 아몰라코딩 2025. 3. 11.
정규형 조건 설명 예시
2NF (제2정규형) 1NF를 만족하고, 부분 함수 종속이 제거됨 기본키의 일부가 아닌 속성(칼럼)은 기본키 전체에 종속되어야 한다. 즉, 기본키의 일부에만 의존하는 속성이 없어야 한다. 학생(학번, 강좌코드, 강좌명, 교수명) → 강좌명과 교수명은 강좌코드에만 의존 → 강좌 정보를 분리하여 정규화
3NF (제3정규형) 2NF를 만족하고, 이행적 종속(Transitive Dependency)이 제거됨 기본키가 아닌 속성이 다른 기본키가 아닌 속성에 종속되면 안 된다. 즉, 기본키에 직접 종속되지 않는 속성을 제거해야 한다. 학생(학번, 이름, 학과, 학과장) → 학과장은 학과에 종속됨 → 학과 정보를 분리하여 정규화

설명

  1. 2NF (제2정규형)
    • 1NF(제1정규형)를 만족해야 하며, 즉 테이블 내 컬럼 값들이 원자값(Atomic Value)이어야 한다.
    • 기본키(Primary Key)의 "일부"에만 종속된 속성을 제거해야 한다.
    • 해결 방법: 부분 종속된 속성을 별도의 테이블로 분리한다.
  2. 3NF (제3정규형)
    • 2NF를 만족해야 한다.
    • 기본키가 아닌 속성이 다른 기본키가 아닌 속성에 종속되는 경우(이행적 종속)를 제거해야 한다.
    • 해결 방법: 해당 속성을 새로운 테이블로 분리하고, 외래키(Foreign Key) 관계를 설정한다.

정규화 예제

정규화 전 (1NF)

학번 강좌코드 강좌명 교수명
1001 CS101 데이터베이스 홍길동
1002 CS102 알고리즘 이순신
  • 여기서 강좌명과 교수명이 강좌코드에만 종속된다. 즉, 강좌코드가 기본키의 일부인 경우 부분 종속성이 발생한다.

2NF 적용 후

학생 테이블

학번
1001
1002

강좌 테이블

강좌코드 강좌명 교수명
CS101 데이터베이스 홍길동
CS102 알고리즘 이순신
  • 강좌명과 교수명이 강좌코드에만 종속되므로 강좌 정보를 분리하여 부분 종속성을 해결했다.

3NF 적용 후

학생 테이블

학번
1001
1002

강좌 테이블

강좌코드 강좌명 교수ID
CS101 데이터베이스 P001
CS102 알고리즘 P002

교수 테이블

교수ID 교수명
P001 홍길동
P002 이순신
  • 강좌 테이블에서 교수명이 교수ID에 종속되므로, 이를 교수 테이블로 분리하여 이행적 종속을 해결했다.