3NF 점검

이행 종속은 기준 테이블로 분리한다

주문 행이 고객ID를 통해 고객명과 현재 주소를 결정한다면, 그 속성은 주문이 아니라 고객 테이블의 책임입니다.

주문 행

주문ID가 고객ID를 가진다

주문ID 고객ID

주문은 고객을 가리키는 참조만 들고 있으면 됩니다.

결정자

고객ID

고객ID가 고객명과 현재 주소를 결정합니다.

고객 속성

고객명 · 현재 주소

주문마다 반복되면 갱신 이상이 생깁니다.

주문ID -> 고객ID 그리고 고객ID -> 고객명, 현재 주소

분리 전: 주문_혼합

갱신 이상
주문_혼합
주문ID 고객ID 고객명 현재 주소
O100 C01 김철수 서울
O101 C01 김철수 서울

고객 주소가 바뀌면 같은 고객의 모든 주문 행을 찾아 수정해야 합니다.

3NF 분리 후

고객 속성 1곳
고객
고객ID 고객명 현재 주소
C01 김철수 서울
주문
주문ID 고객ID 배송지
O100 C01 서울
O101 C01 부산

주문은 고객ID만 참조하고, 고객명과 현재 주소는 고객 테이블 한 곳에서만 관리합니다.

예외: 배송지는 고객의 현재 주소가 아니라 주문 당시 고정된 사실일 수 있으므로 주문 테이블에 남길 수 있습니다.