🧠 정규화 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 |