DATOR


22.주문은 고객과 상품의 관계인가?(2) 기본 카테고리


주문은 고객이 특정 시점 상품을 대상으로 한 행위입니다.
즉 주문의 식별자는 고객과 주문시각입니다.
그런데 주문을 관계로 보면 주문의 식별자는 고객과 상품이 됩니다.
만일 다음에 같은 고객이 같은 상품을 주문하면?

 

엔티티 중에 지속이 되는 것이 있다고 했는데(개체 엔티티)
관계도 지속이 되는 엔티티입니다.
즉 너와 나의  친구관계, 부부관계 이런 것들이 일정기간 지속되는 것이죠.

 

주문에서 고객과 상품관계는 어떨까요?
고객이 특정 시점에 상품과 관계한 것으로 그 순간에 끝난 관계 입니다.
다음에 그 고객이 그 상품을 또 살 수 있고
그 관계는 전과 다른 관계가 됩니다.
즉 시간 축이 개입되고 관계는 순간으로 끝납니다.
즉 관계엔티티가 아닙니다.

 

결국 주문은 고객의  행위엔티티입니다.
그러면 상품을 뭘까요?
상품은 단지 행위 엔티티 주문의 속성일 뿐입니다.
그런데 속성에 상품 관련 속성들을 직접 사용하지 않습니다.(모델링 책에 나오는 각종 이상 현상 참고)
별도로 상품엔티티를 관리합니다.
그래서 상품속성들이 정규화 됩니다.
몇 정규화지요?  일반 속성에 종속되는 속성을 정규화하는 것이기에 3정규화 입니다.
그런데 주문 시에 상품을 1개 아니라 여러개를 주문할 수 있으면
1정규화 해서 자식 엔티티로 분리됩니다.
결국 주문과 주문상세가 됩니다.  주문상세의 식별자는 주문의 식별자+상품번호가 되겠지요.

 

관계에는 2가지 있습니다.
부모가 자식을 낳는 것처럼 부모가 없이는 자식을 생성할 수 없는 절대관계.
자식의 생성과 관계없는 상대관계.

 

전자는 부모의 식별자가 자식의 식별자에 포함됩니다.(인조식별자 사용 전)
후자는 부모의 식별자가 자식의 일반속성에 포함됩니다.

 

주문에서 상품은 절대관계가 아닙니다.

 

대부분의 모델이  주문 혹은 계약은  고객과 상품의 절대관계 자식으로 그려져 있습니다.
하지만 이것 갖고는 키중복이 나기에 주문일시, 계약일시를 추가합니다.
계약일시가 추가되는 순간 상품번호는 필요없는 식별자가 되버립니다.
만일 특정 순간에 두 개의  주문이 가능하다면 그렇 수 있는데
그렇게 업무규칙 만드는 곳은 없겠지요.

 

행위의 주체와 이들이 한 행위.
이 개념이 명확히 서야 엔티티를 추출, 형태확정, 관계 수립 등등이 쉽고, 정확해 집니다.

 

순간은 행위,  기간은 관계  입니다.


관계엔티티는 상품 엔티티 편에서 다시 설명합니다.

 

 

 

 

Tag :

Leave Comments