2009년 5월 17일 일요일

recursive relationship

사용자 삽입 이미지
DATE 가 쓴 DATABASE SYSTEMS 책의 ERD 이다..

매주 알티베이스 가서 세미나를 하기 때문에 부랴부랴 하고는 있는데 ...

누구나 다 아는 recurisive relationship 에서 EXP IMP 를 도저히 모르던중에 의미를 찾았다 ..



자료구조 수준의 Opeation

  • explosion : 
    explosion은 입력으로 부품번호가 들어가서 출력으로 조립에 필요한 하위부품 정보가 나오는 Operation이며, 이를 재귀적으로 적용하면 Indented BOM을 구성한다
  • implosion : 
    Implosion은 부품번호를 입력하면 이 부품으로 조립되는 모든 조립부품을 출력해 준다. 이는 Reorder를 내는데 사용된다. 보통 Implosion은 1 level 상위를 대상으로 한다.

EXP를 따라가면 이 부품을 만들기 위해 필요한 부품의 정보가 나오고
IMP를 따라가면 이 부품으로 조립되는 부품의 모든 정보가 나온다?? ;;;

. 주요 질의

Indented Bill은 부품의 전체 Tree 구조를 알수 있게 해준다. 이때 Tabel에서 정의한 leve을 보면 부품의 포함관계를 알 수 있다. Copy Bill은 전체 Tree 구조중의 부분 Tree를 Copy 하는 질의이다. 이 질의는 새로운 부품에 대한 BOM을 작성할 때 기존의 부붐을 많이 공유하므로 Copy 한 것의 일부분만 수정하여 새로운 BOM을 구성하면 되므로 매우 유효하다.

Relational db의 SQL을 이용할 경우 다음과 같은 기본 질의를 지원할 수 있다.

1 level explosion 과 implosion

explosion:
SELECT *
  	FROM STRUCTURE
	WHERE Parent-Part = "A";

implosion:
SELECT *
	FROM STRUCTURE
	WHERE Component="C"

부품 이름등 부가적인 정보를 알고 싶을경우 Part-Master Tabel과 Join을 하여 결과를 보여준다. 말단의 부품까지 모든 Tree 구조를 보여주기 위해서는 다음과 같은 View와 Recusive Join을 하는 질의를 작성해야 한다. 이러한 Recursive join은 데이타베이스에 성능저하에 많은 영향을 주며 질의 자체가 항시 다시 Compile되기 때문에 관계형 데이타베이스를 기초한 BOM 프로세스 작성은 적합하지 않다.

CREATE VIEW BILL
	AS SELECT one.*, two.Component, two.Quantity-per
	FROM Structure one, Structure two
	WHERE one.Component = two.Parent       /*  1 level 이상 경우 처리 */
	OR	one.Componet NOT NULL;         /* 1 level  경우 처리 */

SELECT *
	FROM BILL
	WHERE Parent="A"

위의 결과를 실제 MS Access 7.0으로 구현한결과가 다음과 같다.

Structure
IDparentcomponentdescription
1AD
2AE
3BF
4BG
5CH
6CI
7HJ
8IK

위의 Record 에 대하여 아래와 같은 질의가 가능하며 그결과는 다음의 표와 같다. (잘못된 Query : C-H-J관계가 나타나야 함)

SELECT a.parent, a.compont, a.description
FROM structure AS a, structure AS b
WHERE a.component=b.parent or a.component is Not Null
GROUP BY a.parent, a.compont, a.description;
Multi level query
parentcomponentdescription
AD
AE
BF
BG
CH
CI
HJ
IK





댓글 2개:

  1. 형 공부 너무 열심히하시는거 아니에요??ㅎ

    답글삭제
  2. ㅎㅎㅎ 볼 DB 책이 산더미야 ㅋㅋㅋ ;; 슬슬 회사에서 빡시게 굴릴려고 하는듯 ;;

    답글삭제