[코담]
웹개발·실전 프로젝트·AI까지, 파이썬·장고의 모든것을 담아낸 강의와 개발 노트
정규화 문제 | ✅저자: 이유정(박사)
📝 문제 1: 고객 주문 관리 시스템
❗ 문제점 분석
- 열(column)이 반복되고 있음
- 주문상품1, 주문상품2 … → 상품이 많아지면 계속 열을 추가해야 함
- 고객 정보와 상품 정보가 하나의 테이블에 섞여 있음
- 상품에 대한 추가 정보(예: 카테고리)가 있다면?
고객명 | 전화번호 | 주문상품1 | 주문상품2 |
---|---|---|---|
홍길동 | 010-1234-5678 | 키보드 | 마우스 |
이영희 | 010-9876-5432 | 모니터 | (비었음) |
❌ 정규화 전 테이블 (초기 상태) |
1정규형 (1NF) – 반복 컬럼 제거
2정규형 (2NF) – 부분 종속 제거 "고객명 / 전화번호"는 주문상품과 직접 관계 없음 → 따로 분리
3정규형 (3NF) – "이행 종속 제거"
만약 주문상품
이 특정 카테고리
를 가지고 있다면?
✅ 정규화 단계별로 나누기
◽ 1정규형 (1NF) – 반복 컬럼 제거
고객명 | 전화번호 | 주문상품 |
---|---|---|
홍길동 | ||
홍길동 | ||
이영희 |
◽ 2정규형 (2NF) – 부분 종속 제거 "고객명 / 전화번호"는 주문상품과 직접 관계 없음 → 따로 분리
고객(Customer)
고객ID | 고객명 | 전화번호 |
---|---|---|
1 | ||
2 |
주문(Order)
고객ID | 주문상품 |
---|---|
1 | |
1 | |
2 |
◽ 3정규형 (3NF) – "이행 종속 제거"
만약 주문상품
이 특정 카테고리
를 가지고 있다면?
상품명 | 카테고리 |
---|---|
상품(Product)
상품명 | 카테고리 |
---|---|
주문(Order)
고객ID | 상품명 |
---|---|
1 | |
1 | |
2 |
📝 문제 2: 회사 프로젝트 관리 시스템 ❗문제점 (정규화가 필요해요)
- "참여프로젝트1", "참여프로젝트2"처럼 열(column)이 반복됨 → 프로젝트가 늘어나면 열이 계속 생겨야 해요 ❌
- "부서명"은 직원과만 관련 있음 → 프로젝트와는 무관
- "프로젝트명"이 속한 "프로젝트 분야" 같은 게 생긴다면 → 직원이 아닌 다른 컬럼을 통해 알 수 있음 → 이행 종속 발생
❌ 정규화 전 테이블 (초기 상태)
직원명 | 부서명 | 참여프로젝트1 | 참여프로젝트2 |
---|---|---|---|
김대리 | 마케팅부 | 로고 리뉴얼 | 홈페이지 개선 |
박과장 | 개발부 | 앱 개발 |
1정규형 (1NF)
2정규형 (2NF) 부서명은 직원과만 관련 있음 → 분리 필요 3정규형 (3NF) 프로젝트명이 속한 분야가 있다면 → 이행 종속 제거
◽ 1정규형 (1NF)
직원명 | 부서명 | 프로젝트명 |
---|---|---|
김대리 | ||
김대리 | ||
박과장 |
◽ 2정규형 (2NF) 부서명은 직원과만 관련 있음 → 분리 필요
Employee
직원ID | 직원명 | 부서명 |
---|---|---|
1 | ||
2 |
Participation
직원ID | 프로젝트명 |
---|---|
1 | |
1 | |
2 |
◽ 3정규형 (3NF) 프로젝트명이 속한 분야가 있다면 → 이행 종속 제거
Project
프로젝트명 | 분야 |
---|---|