brunch

You can make anything
by writing

C.S.Lewis

by imRachel Mar 02. 2023

[SQLD1] 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

- WHERE문이 매우 길어짐

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

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

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


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

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

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

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

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


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

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

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

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


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


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



[본 글은 SQLD 자격증 공부를 위해 아카이빙한 글입니다.

출처 - https://snnchallenge.tistory.com/190]

작가의 이전글 [SQLD1] 4.1 식별자
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari