상세 컨텐츠

본문 제목

엔티티 주 식별자 상속, PK 제약, 유니크 인덱스

기록 - 프로그래밍/Data

by wjjun 2024. 4. 3. 12:09

본문

 

 

주 식별자 상속

부모 엔티티가 없으면 자식 엔티티가 없는 종속관계에서는 부모 엔티티의 주 식별자를 자식 엔티티에 식별자로 상속하는 것이 일반적입니다. 반면 하위 엔티티가 상위 엔티티에 존재 종속되지 않으면 상위 엔티티가 존재하지 않아도 하위 엔티티가 존재할 수 있으면 일반 속성으로 상속하는 것이 일반적입니다.

 

주 식별자 상속의 가장 기본적인 기준은 엔티티 종속 관계이지만 일반 속성으로 식별자를 상속할 수도 있습니다.

자식 엔티티의 정체성은 물론 자식 엔티티 정체성과 효율성에 관여하는 것이 주 식별자입니다.

 

인조 식별자를 남발해서 상위 엔티티 식별자를 하위 엔티티 속성으로 상속하는 것 역시 지양해야 합니다.

하위 엔티티가 상위 엔티티 업무에 종속되는지 하위 엔티티에서 단지 상위 엔티티를 참조만 하려는 목적인지에 따라 식별자를 상속하면 문제는 없다. 하지만 하위 엔티티에서 상위 엔티티의 속성을 조회하려 할 때 접근이 복잡해질 수 있다.

 

접근이 복잡하다는 것은 성능 이유가 발생할 수 있어 적절하게 주 식별자를 상속해서 성능 문제를 해결해야 합니다.

 

 

PK 제약과 유니크 인덱스

PK 속성은 중복된 값을 가질 수 없고 Null 값을 가질 수 없습니다. 반면 유니크 인덱스는 값이 유일하기만 하면 돼서 NULL 값을 가질 수 있습니다. 따라서 유니크 인덱스에 NULL을 허용하지 않으면 기능상 PK 제약과 유사합니다.

 

PK와 유니크는 태생이 다릅니다. 유사해도 같은 용도로 사용하면 안됩니다. 특히 PK 없이는 FK 생성도 할 수 없습니다. FK를 사용할 수 없다는 이유만으로도 유니크 인덱스를 사용하지 말고 PK를 사용해야 합니다.

 

PK는 옵티마이저가 올바른 판단하도록 돕습니다.

PK는 부하를 준다는 선입견을 가질 수 있지만 옵티마이저에게 올바른 정보를 제공해 좋은 실행계획을 세우는데 도움을 줍니다. 엔티티에는 여러개의 후보 식별자가 존재할 수 있습니다. 후보 식별자 중 대표적인 식별자가 주 식별자 PK가 되며 나머지 후보 식별자는 유니크 인덱스를 생성하게 됩니다. 따라서 하나의 테이블에 유니크 인덱스는 여러 개 생성될 수 있습니다.

 

유니크 인덱스에 Not Null 제약을 생성해야 할 때도 있습니다. PK 제약을 대신해 유니크 인덱스를 사용하면 ERD 관리에 어려움이 있을 수 있습니다.

 

 

인조 식별자 채번

인조는 유일하게 식별하는 것이 주요 역할로 어떤 체계 없이 무의미한 일련번호를 사용하는 것이 바람직합니다.

 

 

복잡한 주 식별자

주 식별자를 구성하는 속성은 다섯개 이내가 좋습니다. 업무 식별자가 주 식별자가 되는 것은 바람직하며 가장 기본적인 원칙입니다. 이 원칙에 주 식별자는 자기 자신의 엔티티만 고려하는 것이 아닌 주변 관계를 가진 엔티티도 고려해야 합니다.

 

다대다 관계를 관리하려면 교차 엔티티가 필요해지는데 교차 엔티티는 일반적으로 양쪽 엔티티의 주 식별자를 식별자로 상속받습니다.

교차 엔티티의 주 식별자를 단순하게 만드는 방법은 교차 엔티티에 인조 식별자를 채택해 자체적으로 주 식별자를 단순화하는 방법과 부모 엔티티의 주 식별자를 단순화하는 방법입니다.

 

 

관련글 더보기

댓글 영역