상세 컨텐츠

본문 제목

엔티티 주 식별자 선정 방법

기록 - 프로그래밍/Data

by wjjun 2024. 4. 1. 12:20

본문

 

주 식별자 선정 절차

주 식별자 도출은 업무 식별자를 도출하는 것이 선행되어야 합니다.

업무 식별자 도출 > 후보 식별자 도출 > 업무 식별자를 주 식별자로 검토 > 후보 식별자 중 주 식별자 검토 -> 후보 식별자를 주 식별자로 선정 > 인조 식별자 중 주 식별자 검토 > 인조 식별자를 주 식별자로 선정

 

업무 식별자가 도출되지 않는 한 최종 식별자인 주 식별자는 결정될 수 없습니다. 업무 식별자는 이미 엔티티를 정의하는 단계에서 규명돼야 합니다. 엔티티 정의와 업무 식별자는 서로 뗄 수 없는 개념입니다.

업무 식별자를 도출하고 엔티티가 확고해지면 가능한 모든 후보 식별자를 도출합니다. 

업무 식별자도 후보 식별자의 하나지만 인스턴스 유일성을 보장해주는 후보 식별자는 한 엔티티에 여러 개 존재할 수 있습니다.

 

업무 식별자와 후보 식별자가 도출되면 주 식별자를 결정해야 합니다. 주 식별자는 업무 식별자를 포함한 후보 식별자 중 선택합니다. 가능한 업무 식별자를 주 식별자로 사용하는 것이 좋습니다. 후보 식별자 중 마땅한 주 식별자가 존재하지 않으면 인조 식별자를 사용할 수도 있습니다.

 

업무 식별자는 비즈니스의 의미를 파악하기 쉬우며 업무적으로 많이 사용되어 일반적으로 조회 요건에 효율적입니다.

업무 식별자를 주 식별자로 사용하면 인조 식별자 채택으로 발생되는 추가 인덱스도 절감되는 효과가 있습니다.

다만 업무 식별자는 데이터를 발생시키는 주체로 여러 속성으로 구성된 경우가 많습니다. 하위 엔티티가 많지 않을 때는 크게 고려하지 않아도 되지만 핵심 엔티티일 때는 하위 엔티티의 주 식별자 구조를 복잡하게 만들 수 있어 주 식별자로 채택하는 것에 신중해야 합니다.

 

하위 엔티티에 속성이 여러 개 추가되는 것도 모델 관리나 인덱스 효율성 측면에서 옳지 않을 수 있습니다.

데이터를 일반화 할수록 업무 식별자를 사용하지 못하고 인조 식별자를 사용하게 될 수 있습니다.

 

엔티티 관계 주 식별자 구성
자립 엔티티 해당 없음 자체 PK
종속 엔티티 일대일 1:1 상위(엔티티) PK
일대다 1:M 상위(엔티티) PK + 자체(엔티티) 속성
교차 엔티티 일대일 1:1  상위(엔티티) PK + 자체(엔티티) PK
일대다 1:M 상위(A 엔티티) PK + 상위(B 엔티티) PK
다대다 M:M 상위(A 엔티티) PK + 상위(B 엔티티) PK + 자체(엔티티) 속성
이력 엔티티 일대다 1:M 상위(엔티티) PK + 일자

 

주 식별자를 구성하고 있는 속성의 순서를 신중하게 정해야 합니다.

주 식별자 속성 순서는 조회 성능에 많은 영향을 주게 됩니다. 조회 요건은 신중하게 검토해서 정해야 합니다.

 

문제는 조회 요건을 검토할 수 있는 시점이 최소 개발 단계입니다. 엔티티를 사용한 모든 쿼리는 개발 마지막 단계에서 결정됩니다. 그래서 개발 후 테스트 단계에서 성능 때문에 주 식별자 구성 속성 순서를 변경하는 일이 발생할 수 있습니다.

 

주 식별자를 물리적인 주 키로 생성하면 유니크 인덱스가 생성됩니다. 유니크 인덱스의 첫 번째 속성이 해당 엔티티를 조회하는 조건절에 자주 사용되는 것이 핵심입니다.

 

자주 사용되지 않는 속성을 인덱스의 선행 속성으로 사용하지 않는 것은 당연합니다. 조건절에 포함된 자주 사용하는 속성의 분포도를 고려해서 검색 대상을 초기에 줄여줄 수 있는 속성을 주 식별자 첫 번째에 오도록 해야합니다.

분포도는 엔티티에 포함된 전체 데이터 분포도를 의미하는 것이 아닌 상위 엔티티의 값과 관계 있는 하위 엔티티 인스턴스 개수를 의미하는 카디널리티가 적은 것을 의미합니다.

 

가장 효율적으로 주 식별자의 속성 순서를 결정하려면 인덱스 구조가 자주 사용되는 쿼리문 조건을 이해하는 것이 중요합니다.

Where 절의 구문이 어떤지에 따라 주 식별자 순서가 정해집니다.

 

많은 인덱스 추가는 insert, update 성능을 저하시켜 저장 공간이 낭비됩니다. 그래서 인덱스 설계가 중요합니다.

 

 

관련글 더보기

댓글 영역