본문 바로가기
Developer/데이터베이스

식별자

by TFactory 2019. 5. 12.

식별자란?

  • 하나의 엔티티에 구성되어 있는 여러개의 속성 중에 엔티티를 대표할 수 있는 속성
  • 식별자라는 용어는 논리 데이터 모델링 단계에서 사용하고 키는 물리 데이터 모델링 단계에서 사용한다.

식별자 분류체계

주식별자(PK) 도출기준

  • 주식별자가 될 수 있는 속성이 다수 존재해도 해당 업무에서 자주 사용하는 속성을 지정한다.
  • 명칭, 내역등 이름형식의 속성을 주식별자로 선정하면 추후 물리 데이터베이스에서 쿼리문을 사용할때 WHERE 절에 항상 해당하는 속성이 있어야 하기 때문에 성능 저하의 요인이 될 수 있다.
  • 많은 속성을 주식별자로 정해버리면 추후에 물리데이터베이스에서 쿼리문을 사용할 때 간단한 쿼리라도 길이가 길어지기 때문에 소스구성이 복잡해 지고 성능 저하의 원인이 된다. 하지만 만약 임의의 식별자를 생성해서 주식별자를 선정해서 사용할 때 이로인해 성능이 저하되면 반정규화 측면에서 여러개의 속성을 주식별자로 삼을 수 도 있다.

식별자 관계

  • 외부식별자를 주식별자로 사용하는 경우는 상속받은 엔티티가 생성이 되어야지만 상속받는 엔티티가 상속이 되는 경우이다. 즉 자식엔티티의 주 식별자로 부모 엔티티의 주식별자가 상속되는 경우이다.

비식별자 관계

  • 부모로부터 받은 속성이 필수 속성이 아니기 때문에 자식엔티티에서는 주식별자가 아니라 일반적인 속성으로 사용하는 경우이다.
  • 부모와 자식엔티티의 생명주기(LifeCycle)을 따로 관리하는 경우 해당된다. 이럴때는 Foreign Key를 연결하지 않기도 하지만 비식별자 관계로 모델링을 하는것이 더 좋은  방법이다.
  • 어떤 여러개의 엔티티가 통합되었는데 통합된 엔티티가 기존에 연결된 엔티티들과 관계를 가질때
  • 자식엔티티에서 부모로부터 물려받은 속성을 주식별자로 사용해도 되지만 별도의 속성을 생성할때가 더 효과적이라고 판단되었을 때

식별자 관계로만 설정했을 경우 문제점

  • 식별자 관계로만 설정을 할 경우 최상위 부모 엔티티와 자식 엔티티가 1:M관계일 경우 자식 엔티티는 부모의 주식별자가 2개이상 존재하기 때문에 별도의 속성을 하나이상 추가해 주 식별자로 선정해야 하는데 이렇게 계속 상속이 되면 결국 주식별자로 선정한 속성을 점점 많아져서 쿼리문이 길어지고 오류를 범하기 쉽게 되어버린다. 이럴때를 위해서 식별자 관계가 아니라 비 식별자 관계를 이용해서 단순화를 해야한다.

보조식별자  관계로만 설정했을 경우 문제점

  • 각각의 엔티티에는 중요한 기준속성들이 존재한다. 이 기준속성들은 주민등록번호, 사원번호, 주문번호 등이 있는데 조회할 때 조건절에 이 속성들을 이용해서 조회하는 경우가 빈번하다 그렇기 때문에 보조식별자 관계로만 설정해서 했을경우 불필요하게 부모엔티티와 조인해서 부모엔티티에서 가져와야 하는 상황이 발생하게 된다.
  • 비식별자관계 선택 프로세스
  • 자식테이블 독립 PK가 필요한지 판단하는 것은 업무적 필요성과 성능상의 필요성 모두 포함하는 것이다.

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

 

'Developer > 데이터베이스' 카테고리의 다른 글

관계(Relationship)  (0) 2019.05.12
속성(Attribute)  (0) 2019.05.12
엔티티(Entity)  (0) 2019.05.12
데이터 모델링  (0) 2019.05.12