본문 바로가기

SQLD

[SQLD : Ⅰ. 데이터 모델링의 이해] 4-2. 식별자관계와 비식별자관계

* 식별자 관계와 비식별자 관계의 결정

 - 외부식별자는 다른 엔티티와 관계를 통해 자식 쪽 엔티티에 생성되는 속성

 - 관계와 속성을 정의하고 주식별자를 정의하면 논리적 관계에 의해 자연스럽게 외부식별자 도출됨

 - 엔티티에 주식별자가 지정되고 엔티티간 관계를 연결하면 부모쪽 주식별자를 자식 엔티티의 속성으로 내보내려함

   자식 엔티티에서 부모엔티티로부터 받은 외부식별자를 자신의 주식별자로 이용할지 결정해야 함

 

* 식별자 관계

 - 부모로부터 받은 식별자를 자식 엔티티의 주식별자로 이용하면 NULL값이 있으면 안됨

 - 부모로부터 받은 속성을 자식엔티티가 모두 사용하고 주식별자로 사용하면 1:1 관계

   부모로부터 받은 + 다른 부모엔티티에서 받은 속성을 포함 OR 스스로 갖는 속성으로 주식별자 구성하면 1:M 관계

 - 사원과 발령의 관계는 1:M 관계, 사원과 임시직사원의 관계는 1:1 관계

 - 식별자 관계 : 자식 엔티티의 주식별자로 부모 주식별자가 상속이 되는 경우

 

* 비식별자 관계

 - 부모엔티티로부터 속성을 받았지만, 자식엔티티의 주식별자로 사용하지 않고 일반적인 속성으로 사용하는 경우

 - 비식별자 관계에 의한 외부속성 생성하는 경우

    1) 자식 엔티티에서 받은 속성이 필수가 아니어도 무방해서 부모 없는 자식이 생성될 수 있는 경우

    2) 엔티티별로 데이터 생명 주기를 다르게 관리할 경우 (자식은 남기고 부모 엔티티가 먼저 소멸될 경우)

    3) 여러 엔티티가 하나의 엔티티로 통합되어 표현됐는데, 각 엔티티가 별도의 관계를 가질 때

접수 엔티티가 인터넷 접수, 내방접수,전화접수로 통합됨

각 엔티티가 별도의 관계를 갖고 있음

각 관계로부터 받은 주식별자를 접수엔티티의 주식별자로 사용할 수 없음

    4) 자식 엔티티에서 별도의 주식별자를 생성하는 것이 더 유리하다고 판단할 때

계약은 사원에 의해 이루어져 주식별자를 구성할 수 있지만

계약번호 단독으로 계약엔티티의 주식별자 구성 가능, 더 효율적

계약사원번호를 일반속성 외부식별자로 사용

 

* 식별자 관계로만 설정할 경우 문제점

 - PLANT의 경우 한 개의 속성만 PK속성, EQPEVTSTSHST의 경우 부모로부터 모두 식별자관계 연결로 5개 PK

 - 1:M 으로 전개되면 자식 엔티티는 1개 이상의 속성이 추가됨 

 - EQPEVTSTSHST에 설정된 PK 속성을 이용하여 해당 이력의 수리 ITEM과 작업자에 대한 엔티티 별도 발생한 모델

 - EQPEVTSTSHST에서 새로운 엔티티 EQP_ITEM, EQP_WORKER 관계를 가질때 세개 엔티티 정보 가져오는 SQL

SELECT A.EVENT_ID, A.TRANS_TIME, A.HST_DEL_FLAG, A.STATUS_PROMPT, A.STATUS_OLD, A.STATUS_NEW 
FROM EQPEVTSTSHST A, EQP_ITEM B, EQP_WORKER C 
WHERE A.PLANT = B.PLANT AND A.EQUIPMENT_ID = B.EQUIPMENT_ID AND A.STATUS_SEQ = B.STATUS_SEQ 
    AND A.EVENT_ID = B.EVENT_ID AND A.TRANS_TIME = B.TRANS_TIME AND B.ITEM_CD = 'A001' 
    AND A.PLANT = C.PLANT AND A.EQUIPMENT_ID = C.EQUIPMENT_ID AND A.STATUS_SEQ = C.STATUS_SEQ 
    AND A.EVENT_ID = C.EVENT_ID AND A.TRANS_TIME = C.TRANS_TIME AND C.WORKER_SID = 'A012008001'

 - WHERE문이 매우 길어짐

 - 조인에 참여하는 주식별자 속성 수가 많을 경우 조인 관계를 누락하여 개발할 때가 있음

 - 식별자 관계로만 연결된 데이터 모델 :

    주식별자 속성이 지속적으로 증가할 수 밖에 없는 구조로서 개발자 복잡성과 오류가능성을 유발시키는 요인이 됨

 

* 비식별자 관계로만 설정할 경우 문제점

 - 자식엔티티에서 데이터를 처리할 때 쓸데없이 부모엔티티까지 찾아가야하는 경우 발생

 - REP001T, REP005T, REP007T 간의 관계가 비식별자 관계,

   점검번호, 분야번호 속성이 관계를 타고 자식엔티티로 내려가는 것을 차단

 - 맨 하위에 있는 REP007T 엔티티에서 어떤 점검 정보를 볼 때, 불필요한 조인 다량 유발하여 성능 저하

 

* 식별자관계와 비식별자 관계 모델링

 - 비식별자관계 선택 프로세스

   가장 중요한 요인은 자식 엔티티의 독립된 주식별자 구성이 필요한지 분석하는 부분

   독립적으로 주식별자를 구성한다는 의미는 업무적 필요성과 성능상 필요여부를 모두 포함하는 의미

 

 - 식별자와 비식별자관계 비교

 - 식별자와 비식별자를 적용한 데이터 모델