관계형 데이터 모델링 프리미엄 가이드 DB구축 (2017년)
복잡한 주 식별자 0 0 627

by 구루비스터디 식별자 [2017.10.18]


잘못알려진 상식

  • 흔히 주 식별자를 구성히는 속성은 다섯개 이내가 좋으며, 많더라도 일곱 개를 넘어서는 안된다는 등의 가이드(Guideline)가 존재한다
    하지만 이는 전혀 논리적이지 않고 좋은 개념이 아니다.


복잡한 주실별자

  • 업무 식별자가 주 식별자가 되는 것은 바람직하며 가장 기본적인 원칙
  • 주변에 관계를 가지는 엔터티도 고려해야 한다
  • (다른 엔터티에서 빈번하게 참조되면 주 식별자가 여러 속성으로 구성되는 것이 문제가 될 수 있지만 그렇지 않다면 문제 될 것이 없다.
  • 오히려 성능을 고려해 깊은단계의 복잡한 조인(join)을 피하려고 주 식별자를 식별자로 상속시키는 전략 탓에 주 식별자가 복잡 해질 수 있다.)
  • ->이때는 주 식별자를 구성하는 속성의 개수에 대한 가이드가 필요할 수 있다.
  • 많은엔티티 에서 참조되지 않으면 주식별자가 복잡한것은 보통 문제가 되지 않는다.
  • (오히려 업무 식별자를 그대로 사용하는 것이 비람직해서 인조 식별자를 채택할 이유가 없다.)
  • -> 인조 식별자를 채택하면 인덱스를 히나 더 생성해야 하며 업무 식별자에 유니크 인텍스를 생성해야 하므로 업무식별자에 대한 별도의 관리가 필요해진다


주식별자가 복잡해질때

  • 기준데이터를관리할 때
  • 집계 데이터를 관리할 때
  • 인스턴스를 생성하는 기준이 복잡할 때
  • 교차 앤터티일 때
  • 슈퍼 식별자가 사용될 때
  • PK 인덱스(커버링 인덱스)를 사용하려 할 때
  • 주 식별자상속이 지속적으로 이루어질 때


기준데이터를관리할 때

  • 기준정보는 보통 하위 엔터티가 존재하지 않는다.
  • 식별자가 복집해지는것은 문제가 되지 않는다
    (인조 식별자를 사용하면 결과를 저장하는 속성(종속자)과 관리 기준이 되는 속성(결정자)사이에 혼란이 생긴다)


집계 데이터를 관리할 때

  • 집계정보는 보통 하위 엔터티가 존재하지 않는다.
  • 집계 엔터티의 주 식별지는 디벤젼(Dimension:관점,차원) 이 되므로 많은 싱위(부모) 엔티티가 존재할 수 있다.


인스턴스를 생성하는 기준이 복잡할 때

  • 데이타를 관리하려는 상세 수준에 따라서 주 식별자가 복잡해질 수 있다
  • 왼쪽 엔터티와 같이 매입할 때마다 인스턴스를 생성하면 잔고를 상세하게 관리한다
  • ( 어떻게 관리할지 따라 주식별자가 복잡해진다 )


교차 엔터티일 때

  • 그림8-40을 다대다로 이력테이블로 관리
  • 다대다(M:M) 관계를 데이티로 관리하려면 교차 엔터티가 필요 ( 매핑테이블이 필요하다 )
  • 양쪽 엔터티의 주 식별자를 상속받으므로 교차 엔터티의 주 식별자는 더 복잡해진다.
  • 복잡해진 주식별자로 인해 인조 식별자로 단순화 방법과 부모의 엔터티를 단순화하는 방법이 있다.


슈퍼 식별자가 사용될 때 / PK 인덱스(커버링 인덱스)를 사용하려 할 때

  • 고객ID 엔터티의 주식별자는 고객ID 속성이고 고객변호 속성은 일반속성으로 관리돼야한다.
  • 커버링 인텍스(Covering Index)를 시용하려는 의도나 인덱스를 여러 개 만들지 않으려는 의도에서 슈퍼 식별자(고객번호,고객ID)를 사용
  • -> 이는 주식별자를 잘못 결정한 것이다


주 식별자상속이 지속적으로 이루어질 때

  • 식별자 상속과 단절이 적절이 이루어지지 않으면 주식별자가 복잡해질 수 있다.
  • 조인 없이 조회하기 편리해 무조건 상속하면 주 식별자는 복잡해진다
  • 존재 종속 원칙에 근거해 식별자로 상속했다면 주 식별지가 복집해 지는 것이 잘못된 것은 아니다.
  • 효율성을 고려해 단절 정책을 세워야 한다.
"주주클럽 스터디모임" 에서 2017년에 "관계형 데이터 모델링 프리미엄 가이드" 도서를 스터디하면서 정리한 내용 입니다.

- 강좌 URL : http://www.gurubee.net/lecture/3715

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입