3단계 · 3NF 적용

고객 속성은 고객 테이블로 옮기고, 주문은 고객ID만 참조하도록 정리합니다

3NF의 핵심은 키가 아닌 속성이 다른 비키 속성에 기대지 않게 만드는 것입니다. 이제 주문은 주문 상태만 저장하고, 고객 정보와 상품별 항목은 각자 책임지는 테이블에서 관리됩니다.

고객 1명
고객 테이블
이름과 전화번호를 한 곳에서 관리
고객ID로 참조
주문 1건
주문 테이블
주문일과 고객 연결만 보관
주문ID로 연결
주문 안의 상품들
주문상세 테이블
상품별 단가와 수량을 행 단위로 저장

고객 테이블

PK: 고객ID

고객의 속성은 주문과 분리해 중복 입력을 없앱니다.

C001 | 김철수 | 010-1234
C002 | 이영희 | 010-5678
변경 위치 1곳: 김철수 전화번호가 바뀌어도 고객 테이블 한 행만 수정하면 됩니다.

주문 테이블

PK: 주문ID

주문은 고객의 상세 속성을 들고 있지 않고 누구의 주문인지 참조만 합니다.

001 | C001 | 2024-01-15
002 | C002 | 2024-01-16
이행 종속 제거: 주문ID에서 고객폰이 직접 결정되지 않으므로 주문 테이블이 더 단순해집니다.

주문상세 테이블

PK: {주문ID, 상품ID}

한 주문에 여러 상품이 있어도 상품별 상태는 주문상세가 맡습니다.

001 | P001 | 150만 | 1
001 | P002 | 3.5만 | 1
002 | P003 | 8만   | 1
행 추가로 확장: 주문 001에 상품이 더 생기면 주문 테이블이 아니라 주문상세에만 새 행을 넣습니다.
왜 3NF가 되나
고객폰은 고객ID에, 주문일은 주문ID에, 단가·수량은 {주문ID, 상품ID}에만 종속됩니다
비키 속성이 다른 비키 속성에 기대지 않으므로 역할 경계가 명확해집니다.
최종 효과
고객 정보 반복, 수정 이상, 주문-상품 혼재가 함께 해소됩니다
이제 분해된 세 테이블은 연결은 유지하면서도 각자 한 종류의 사실만 저장합니다.