기획자의 데이터 공부 - 데이터 모델링의 이해
* 식별자 관계와 비식별자 관계의 결정
- 외부식별자는 다른 엔티티와 관계를 통해 자식 쪽 엔티티에 생성되는 속성
- 관계와 속성을 정의하고 주식별자를 정의하면 논리적 관계에 의해 자연스럽게 외부식별자 도출됨
- 엔티티에 주식별자가 지정되고 엔티티간 관계를 연결하면 부모쪽 주식별자를 자식 엔티티의 속성으로 내보내려함
자식 엔티티에서 부모엔티티로부터 받은 외부식별자를 자신의 주식별자로 이용할지 결정해야함
* 식별자 관계
- 부모로부터 받은 식별자를 자식 엔티티의 주식별자로 이용하면 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 자격증 공부를 위해 아카이빙한 글입니다.