본문 바로가기

개발/DB

1~3NF 정규화 과정

🧠 정규화 1NF ~ 3NF 개념 정리 (비유 + 예시 포함)


✅ 1NF (제1정규형): "한 칸엔 하나의 값만!"

💡 핵심 개념

  • 모든 컬럼은 원자값(atomic value)만 가져야 함
  • 한 셀에 여러 개 값을 넣는 건 ❌

📦 비유

엑셀에 한 셀에 여러 전화번호가 들어있으면 검색/수정이 힘들다 → 각 셀에는 하나의 값만!

❌ 위반 예시

회원ID 이름 전화번호
1 철수 010-1111-2222, 010-3333-4444
2 영희 010-5555-6666

✅ 정규화 후

회원ID 이름 전화번호
1 철수 010-1111-2222
1 철수 010-3333-4444
2 영희 010-5555-6666

✅ 2NF (제2정규형): "부분 종속 제거 (복합키 관련)"

💡 핵심 개념

  • 복합 키(2개 이상 컬럼으로 구성된 기본키)가 있을 때,
  • 일부 키에만 종속되는 속성은 따로 분리해야 함

📦 비유

과목명에 따라 교수명이 정해지는 걸 학생정보에 같이 넣으면 중복 발생 → 과목 테이블로 빼자!

❌ 위반 예시

학생ID 과목명 교수명
1 수학 김교수
1 영어 이교수
2 수학 김교수

✅ 정규화 후

수강 테이블

학생ID 과목명
1 수학
1 영어
2 수학

과목 테이블

과목명 교수명
수학 김교수
영어 이교수

✅ 3NF (제3정규형): "이행적 종속 제거"

💡 핵심 개념

  • 기본키 → 컬럼1 → 컬럼2 구조 ❌
  • 기본키 외 컬럼이 다른 컬럼을 결정하게 해선 안 됨

📦 비유

직원ID로 부서를 찾고, 부서로 이름을 또 찾는 구조는 불필요하게 복잡 → 부서 정보는 따로 관리!

❌ 위반 예시

직원ID 부서ID 부서명
1 10 영업팀
2 20 개발팀

✅ 정규화 후

직원 테이블

직원ID 부서ID
1 10
2 20

부서 테이블

부서ID 부서명
10 영업팀
20 개발팀

🔁 요약표

정규화 단계 한 줄 설명
1NF 컬럼에는 한 값만 들어가야 함
2NF 복합키의 일부에만 의존하는 컬럼 제거
3NF 일반 컬럼이 다른 일반 컬럼에 의존하지 않게 분리

'개발 > DB' 카테고리의 다른 글

SQL DB(RDB) vs Nosql  (0) 2025.05.22
트랜잭션 격리수준(Isolation Level) (MySQL)  (2) 2024.11.30
Lock  (1) 2024.11.29
DB 인덱싱  (3) 2024.11.28