Bottom-Up 방식으로 모델링 해보기

예제를 찾기 힘들기 때문에 데브피아에 올라온 질문을 토대로 설명을 해보도록 하겠다. (질문 원본)

 

질문의 내용은 업체별 제품별 제품규격별 가격을 변동을 관리해야하는데 어떻게 해야 좋은 모델을 만들 수 있을까이다. 질문에서 보면 핵심이 되는 엔터티 집합은 업체제품이다. 제품규격은 코드성 엔터티 집합으로 만약 업계표준 같은 것이 정해져 있다면 코드 엔터티 집합이라는 것은 명확해진다. 여기서 업체는 질문에서 보면 제조업체로 볼 수 있다. 제조업체는 현재로써 특별히 관리해야 할 건덕지가 보이지 않으므로 이것도 코드 엔터티 집합으로 볼 수 있다. 그러므로 다음의 엔터티 집합이 본래의 모습이다.

 

 


제조업체, 제품규격을 코드화 해서 대충 다음과 같은 모델이 만들어 질 것이다.

 


문제는 제품규격에 대한 가격변동에 따른 이력을 관리해야 하는 것에 있다. , 제품제품규격 사이의 관계가 제품가격변동이력으로 변경되며, 1:다의 관계에서 다:다의 관계가 된다.

 


이제 다:다 관계를 풀어 이력 엔터티 집합으로 만들면 된다. 여기서 한 가지 결정을 해야 하는 것은 이력 관리시 가격이 변동되었다는 이벤트까지 관리를 할 것인지를 결정해야 한다. 실제 데이터는 다음과 같이 들어갈 것이다.

 

--이벤트까지관리

 

시작일  종료일

-------- --------

20010107 20010502

20010502 20010707

20010707 20011107

20011107 20011207

 

 

--이력만관리

 

시작일  종료일

-------- --------

20010107 20010501

20010502 20010706

20010707 20011106

20011107 20011206

 

어찌되었건 최종적으로 다음과 같은 모델이 될 것이다.

 


그렇다면 해당 제품의 현재 가격을 어떻게 쿼리해서 가져올까? 아마도 다음과 같이 될 것이다.

 

select

             a.제조업체명

,            b.제품명

,            d.제품규격

,            c.가격

from 제조업체 a inner join 제품 b

on a.제조업체번호 = b.제조업체번호

inner join 가격변동이력 c

on a.제품번호 = c.제품번호

inner join 제품규격 d

on c.제품규격번호 = d.제품규격번호

where '20071026' between c.시작일 and c.종료일

 

요구사항에 따라서 제품규격을 알기 위해서는 항상 가격변동이력과 조인해야 함이 부담스럽다면 다음과 같은 비정규화도 고려해 볼 수 있다.

 

 

by 이재학 | 2007/10/26 16:21 | 미분류 | 트랙백 | 덧글(0)
트랙백 주소 : http://dbstroy.egloos.com/tb/916461
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]

:         :

:

비공개 덧글

< 이전페이지 다음페이지 >