저번 시간에 여기까지 해보았다. 기준은 아이디어스와 마켓컬리다.
제 1 정규형
중복되는 행이 없으며, 모든 행의 값은 원자적이어야 한다.
하나의 주문에 의해 값을 여러 개 가질 수 있다면 분리해야 한다.
그래서 기존의 주문 테이블에서 다중 값이 가능한 컬럼을 주문 내역으로 옮기고 주문과 주문내역, 주문과 주문상세를 일대다 식별관계로 놓았다.
식별 관계는 내 pk가 남의 fk가 되는 구조고
비식별 관계는 내 컬럼 중 하나가 남의 pk와 엮이는 fk가 되는 것이다. 아래와 같이 수정해보았다.
제 2 정규형
제 1 정규형을 만족하며 후보키에 종속적이지 않거나
후보키 일부 어트리뷰트에 종속적인 어트리뷰트는 별도 테이블로 분리해야 한다.
제 3 정규형
제 2 정규형을 만족하고, 키가 아닌 어트리뷰트들 간에는 서로 종속적인 관계가 없어야 한다.
예: 고객 전화번호가 고객번호에 종속된 경우 별도 릴레이션으로 분리해야 한다.
정규화가 어렵다면 해당 속성이 누구의 것인지 파악하여 구조화해보는 것도 방법이라고 한다.
예: 단가는 영업 전부터 정해져 있다.
전화번호는 매장에 따라 결정되며, 주문과는 아무런 상관이 없다.
전화번호가 바뀐다고 주문과 금액 관련된 내용을 전부 바꾼다고 하면 엄청난 작업이 된다.
변경한 디비 설계다.
이렇게 보니 상품 테이블에서 값을 여러 개 가질 수 있는
수량 컬럼은 상품 상세로 옮겨야 할 것 같다.