주문ID가 고객ID를 가진다
주문ID
주문일
고객ID
주문 자체를 식별하는 행에는 고객을 가리키는 값만 있으면 된다.
주문이 고객ID를 담고, 고객ID가 고객명과 현재 주소를 결정한다면 그 속성은 주문이 아니라 고객 테이블의 책임이다.
주문 자체를 식별하는 행에는 고객을 가리키는 값만 있으면 된다.
고객ID는 고객 한 명의 이름과 현재 주소를 결정한다.
주문ID에 바로 붙이면 같은 고객 정보가 주문마다 반복된다.
| 상황 | 혼합 테이블 | 3NF 분리 |
|---|---|---|
| C01 주소 변경 | O100, O103, O118을 모두 수정 | 고객 C01 한 행만 수정 |
| 고객만 먼저 등록 | 주문 없이는 고객 속성을 넣기 어려움 | 고객 테이블에 먼저 저장 |
| 마지막 주문 삭제 | 고객명·주소 기록도 함께 사라질 수 있음 | 주문 삭제와 고객 보존을 분리 |
판정: 고객명과 현재 주소는 주문의 사건 정보가 아니라 고객ID가 결정하는 기준 정보다. 주문에는 고객ID 참조와 주문 시점 사실만 남기는 쪽이 3NF에 맞다.
예외: 배송지는 고객의 현재 주소가 아니라 주문 당시의 사실이다. 그래서 고객 테이블로 옮기지 않고 주문 테이블에 남길 수 있다.