주 식별자 상속
부모 엔티티가 없으면 자식 엔티티가 없는 종속관계에서는 부모 엔티티의 주 식별자를 자식 엔티티에 식별자로 상속하는 것이 일반적입니다. 반면 하위 엔티티가 상위 엔티티에 존재 종속되지 않으면 상위 엔티티가 존재하지 않아도 하위 엔티티가 존재할 수 있으면 일반 속성으로 상속하는 것이 일반적입니다.
주 식별자 상속의 가장 기본적인 기준은 엔티티 종속 관계이지만 일반 속성으로 식별자를 상속할 수도 있습니다.
자식 엔티티의 정체성은 물론 자식 엔티티 정체성과 효율성에 관여하는 것이 주 식별자입니다.
인조 식별자를 남발해서 상위 엔티티 식별자를 하위 엔티티 속성으로 상속하는 것 역시 지양해야 합니다.
하위 엔티티가 상위 엔티티 업무에 종속되는지 하위 엔티티에서 단지 상위 엔티티를 참조만 하려는 목적인지에 따라 식별자를 상속하면 문제는 없다. 하지만 하위 엔티티에서 상위 엔티티의 속성을 조회하려 할 때 접근이 복잡해질 수 있다.
접근이 복잡하다는 것은 성능 이유가 발생할 수 있어 적절하게 주 식별자를 상속해서 성능 문제를 해결해야 합니다.
PK 제약과 유니크 인덱스
PK 속성은 중복된 값을 가질 수 없고 Null 값을 가질 수 없습니다. 반면 유니크 인덱스는 값이 유일하기만 하면 돼서 NULL 값을 가질 수 있습니다. 따라서 유니크 인덱스에 NULL을 허용하지 않으면 기능상 PK 제약과 유사합니다.
PK와 유니크는 태생이 다릅니다. 유사해도 같은 용도로 사용하면 안됩니다. 특히 PK 없이는 FK 생성도 할 수 없습니다. FK를 사용할 수 없다는 이유만으로도 유니크 인덱스를 사용하지 말고 PK를 사용해야 합니다.
PK는 옵티마이저가 올바른 판단하도록 돕습니다.
PK는 부하를 준다는 선입견을 가질 수 있지만 옵티마이저에게 올바른 정보를 제공해 좋은 실행계획을 세우는데 도움을 줍니다. 엔티티에는 여러개의 후보 식별자가 존재할 수 있습니다. 후보 식별자 중 대표적인 식별자가 주 식별자 PK가 되며 나머지 후보 식별자는 유니크 인덱스를 생성하게 됩니다. 따라서 하나의 테이블에 유니크 인덱스는 여러 개 생성될 수 있습니다.
유니크 인덱스에 Not Null 제약을 생성해야 할 때도 있습니다. PK 제약을 대신해 유니크 인덱스를 사용하면 ERD 관리에 어려움이 있을 수 있습니다.
인조 식별자 채번
인조는 유일하게 식별하는 것이 주요 역할로 어떤 체계 없이 무의미한 일련번호를 사용하는 것이 바람직합니다.
복잡한 주 식별자
주 식별자를 구성하는 속성은 다섯개 이내가 좋습니다. 업무 식별자가 주 식별자가 되는 것은 바람직하며 가장 기본적인 원칙입니다. 이 원칙에 주 식별자는 자기 자신의 엔티티만 고려하는 것이 아닌 주변 관계를 가진 엔티티도 고려해야 합니다.
다대다 관계를 관리하려면 교차 엔티티가 필요해지는데 교차 엔티티는 일반적으로 양쪽 엔티티의 주 식별자를 식별자로 상속받습니다.
교차 엔티티의 주 식별자를 단순하게 만드는 방법은 교차 엔티티에 인조 식별자를 채택해 자체적으로 주 식별자를 단순화하는 방법과 부모 엔티티의 주 식별자를 단순화하는 방법입니다.
엔티티 복합속성 다가속성 (0) | 2024.04.09 |
---|---|
엔티티 속성의 종류(기본, 관계, 추출, 시스템) 도메인 (0) | 2024.04.08 |
엔티티 주 식별자 선정 방법 (0) | 2024.04.01 |
엔티티 식별자 (후보, 대리, 주, 외래, 슈퍼, 인지) (1) | 2024.03.25 |
엔티티 도출과 엔티티명 정의 참고 원칙 (0) | 2024.03.19 |
댓글 영역