수업 시간에 배운 데이터베이스 정규화(Normalization) 과정을 복습하기 위해, 가상의 '온라인 서점 주문 내역' 데이터를 만들어서 직접 정규화를 진행해 보았습니다.
정규화는 데이터의 중복을 줄이고 무결성을 유지하기 위해 반드시 거쳐야 하는 과정입니다. 이번 실습은 **비정규화 데이터(Raw Data)부터 제3 정규화(3NF)**까지 단계별로 진행했습니다.
0. 비정규화 데이터 (Unnormalized Form)
처음 수집된 데이터(Raw Data)입니다. 엑셀로 대충 정리한 것처럼, 하나의 셀에 여러 개의 상품 정보가 섞여 있어 데이터베이스로 쓰기에는 부적합한 상태입니다.
| 주문번호 | 주문일자 | 고객명 | 고객전화번호 | 구매상품 | 상품단가 | 수량 |
| 1001 | 2024-05-01 | 김철수 | 010-1234-5678 | 파이썬기초, 데이터분석 | 20000, 30000 | 1, 2 |
| 1002 | 2024-05-02 | 이영희 | 010-9876-5432 | 인공지능개론 | 45000 | 1 |
| 1003 | 2024-05-03 | 김철수 | 010-1234-5678 | 파이썬기초 | 20000 | 3 |
1. 제1 정규화 (1NF)
목표: 모든 속성의 값은 원자값(Atomic Value)을 가져야 한다.
하나의 칸(속성)에는 하나의 값만 들어가야 합니다. 여러 상품이 쉼표로 묶여있던 행을 분리했습니다. 이제 각 행은 유일한 데이터를 가집니다.
- 기본키(PK): (주문번호, 상품명) - 복합키 사용
| 주문번호 | 주문일자 | 고객명 | 고객전화번호 | 상품명 | 상품단가 | 수량 |
| 1001 | 2024-05-01 | 김철수 | 010-1234-5678 | 파이썬기초 | 20,000 | 1 |
| 1001 | 2024-05-01 | 김철수 | 010-1234-5678 | 데이터분석 | 30,000 | 2 |
| 1002 | 2024-05-02 | 이영희 | 010-9876-5432 | 인공지능개론 | 45,000 | 1 |
| 1003 | 2024-05-03 | 김철수 | 010-1234-5678 | 파이썬기초 | 20,000 | 3 |
2. 제2 정규화 (2NF)
목표: 부분 함수 종속을 제거한다. (기본키 전체가 아닌, 기본키의 '일부분'에만 의존하는 컬럼을 분리)
- 주문일자, 고객명, 전화번호는 주문번호(PK의 일부)에만 종속됩니다.
- 상품단가는 상품명(PK의 일부)에만 종속됩니다.
- 따라서 주문 정보와 상품 정보, 그리고 주문 상세 내역으로 테이블을 쪼갭니다.
2-1. 주문정보 테이블 | 주문번호 | 주문일자 | 고객명 | 고객전화번호 | | :--- | :--- | :--- | :--- | | 1001 | 2024-05-01 | 김철수 | 010-1234-5678 | | 1002 | 2024-05-02 | 이영희 | 010-9876-5432 | | 1003 | 2024-05-03 | 김철수 | 010-1234-5678 |
2-2. 상품 테이블 | 상품명 | 상품단가 | | :--- | :--- | | 파이썬기초 | 20,000 | | 데이터분석 | 30,000 | | 인공지능개론 | 45,000 |
2-3. 주문 상세 테이블 | 주문번호 | 상품명 | 수량 | | :--- | :--- | :--- | | 1001 | 파이썬기초 | 1 | | 1001 | 데이터분석 | 2 | | 1002 | 인공지능개론 | 1 | | 1003 | 파이썬기초 | 3 |
3. 제3 정규화 (3NF) - 최종 완료
목표: 이행적 함수 종속을 제거한다. (기본키가 아닌 일반 컬럼끼리 의존하는 관계를 제거)
주문정보 테이블을 보면 고객전화번호는 고객명에 의존하고 있습니다. (주문번호 -> 고객명 -> 전화번호). 이를 분리하여 고객 관리를 따로 수행합니다.
3-1. 고객 테이블 (신규 생성) | 고객ID | 고객명 | 고객전화번호 | | :--- | :--- | :--- | | C001 | 김철수 | 010-1234-5678 | | C002 | 이영희 | 010-9876-5432 |
3-2. 주문 테이블 (수정됨) | 주문번호 | 주문일자 | 고객ID (FK) | | :--- | :--- | :--- | | 1001 | 2024-05-01 | C001 | | 1002 | 2024-05-02 | C002 | | 1003 | 2024-05-03 | C001 |
3-3. 상품 테이블 (변동 없음) | 상품ID | 상품명 | 상품단가 | | :--- | :--- | :--- | | P001 | 파이썬기초 | 20,000 | | P002 | 데이터분석 | 30,000 | | P003 | 인공지능개론 | 45,000 |
3-4. 주문 상세 테이블 (변동 없음) | 주문번호 | 상품ID (FK) | 수량 | | :--- | :--- | :--- | | 1001 | P001 | 1 | | 1001 | P002 | 2 | | 1002 | P003 | 1 | | 1003 | P001 | 3 |
📝 결론
이렇게 정규화를 거치면 데이터의 중복이 사라지고, 고객의 연락처가 바뀌더라도 '고객 테이블'만 수정하면 되므로 데이터 관리가 훨씬 효율적으로 변합니다.
'사업개발캠프' 카테고리의 다른 글
| 2025 K-뷰티 교육 트렌드: 이제 '금손' 기술도 집에서 배운다고? (1) | 2025.12.18 |
|---|---|
| 이커머스 웹 플랫폼 분석: 네이버 쇼핑, 마켓컬리, SSG.COM 기술 스택 심층 분석 (0) | 2025.12.17 |
| 2025년 바이럴마케팅 성공 사례 (0) | 2025.11.27 |
| 1차원 쾌락을 이기고, 8단계 돌다리 이론으로 사업 성공하는 법 (0) | 2025.11.26 |
| [마케팅 전략] 시장의 룰을 바꾼 그들: 틈새시장(Niche Market) 공략 성공 사례 BEST 5 분석 (0) | 2025.11.25 |