엔터티의 복잡한 주식별자는 여러가지 이유로 복잡해 질수 있는데, 복잡한 주식별자 자체가 문제가 되진 않는다.
주식별자가 복잡해지는 가장 큰 원인은 업무식별자가 복잡하기 때문이다.
논리적으로 업무에서 사용하는 데이터 용도에 따라 주식별자는 복잡해 질수 있고, 이는 업무에 최적화된 식별자다.
물리적으로 성능을 고려하여 주식별자를 식별자로써 상속시켜 주식별자 복잡할 수 있다.
기준데이터를 관리할 때
기준데이터는 업무의 기준이 되는 데이터를 관리하는 엔터티이다.기준데이터를 관리할때 주식별자의 속성이 많아질수 있다. 어떤기준데이터를 얼마나 상세하게 분해해서 관리하느냐에 따라 주식별자에 속하는 속성이 많아질 것이다.
기준데이터를 관리하는 엔터티는 보통 하위 엔터티가 존재하지 않는다. 즉 참조무결성 제약으로 참조되는 엔터티가 존재하지 않는다. 업무식별자가 복잡하다는 이유로 인조식별자를 사용한다면, 기준이 되는 속성과 기준에 의한 결과를 저장하는 속성사이에 론한이 생길뿐이다.
ex) 주식거래 수수료 기준요소는
- 거래소마다(한국,뉴욕,런던등) /주식채권ETF/고객등급에 따라/ 마케팅 이벤트마다/ 거래금액에 따라 각 조건을 모두 사용해 인스턴스를 생성한다. 5개거래소 6개의 고객등급이라면 최대 30개 인스턴스가 생성돼 각각 수수료율관리되어야 한다.
집계데이터를 관리할때
집계 엔터티도 집계기준에 따라 주식별자가 복잡해 지지만, 일반적으로 엔터티가 존재하지 않기 떄문에 집계엔터티의 주식별자를 인조식별자로 책택할 이유는 없다.
인스턴스를 생성하는 기준이 복잡할때
데이터를 관리하려는 상세 수준에 따라서 주식별자가 복잡해질수 있다.
교차엔터터일때
주식별자가 복잡한 대표적인 엔터티가 교차엔터티 일때 다대다 관계를 데이터로 관리하려면 교차엔터티가 필요한데, 교차엔터티는 일반적으로 양쪽 엔터티의 주식별자를 상속받기 때문에 주식별자가 복잡해진다.
슈퍼식별자가 사용될때
슈퍼식별자를 채택해서 주식별자가 복잡해지는 사례는 조회에 사용되는 속성을 주식별자에 포함시킬때 많이 발생한다. where조건 select 구문에 사용된 속성을 전부 인덱스에 포함시킨 커버링 인덱스를 주식별자로 사용하려는 의도나, 인덱스를 여러개 만들지 않겠다는 의도에서 슈퍼식별자를 사용하는데.. 어떤경우에라도 슈퍼식별자는 사용하지 않아야 한다.
어떤 속성을 생략해도 인스턴스가 유일하게 식별할 수 있다면 그 속성은 주식별자에서 삭제해야 한다.
주식별자 상속이 지속적으로 이루어질 때
식별자 상속과 단절이 적절하게 이뤄지지 않으면 주식별자가 복잡해 질수 있다. 존재 종속 원칙에 근거하여 식별자로 상속했다면 주식별자가 복잡해 지는 것이 잘못된 것은 아니지만, 주식별자로 상속되는 것이 사용하기 편리해 무조건 상속하면 자연히 주식별자는 복잡해진다.
업무식별자가 복잡하지만, 하위엔터티가 존재하지 않으면 복잡한 주식별자를 그대로 사용하는 것이 바람직하다. 오히려 인조식별자를 채택하면 인덱스만 하나 더 생기며 업무식별자를 구분하기 어려워진다. 예외적으로 업무식별자가 확고하지 않고, 업무식별자가 바뀔가능성이 존재하면 전략적으로 인조식별자를 채택할 수 있다.
상세논리모델링이 끝나고 나서 대상 엔터티를 추출해 업무식별자가 복잡한 것은 맞는지, 슈퍼식별자가 사용된것은 아닌지, 인조식별자를 채택하면 안되는지 검토해봐야 한다.
'관계형데이터모데링노트 요약' 카테고리의 다른 글
인조식별자 (0) | 2023.11.14 |
---|---|
복합속성&교차엔터티 주식별자 (0) | 2023.11.13 |
주식별자 선정 절차 (0) | 2023.11.12 |
주식별자를 단순하게 설계해야 하는 이유 (0) | 2023.11.11 |
주식별자 선택에 대한 기준 (0) | 2023.11.11 |