관계형데이터모데링노트 요약

인조식별자

mitomi 2023. 11. 14. 09:41
반응형
SMALL

인조식별자는 임의로 생성한 식별자를 의미한다. 후보식별자 중에서 주식별자로 사용할 마땅한 후보가 없을때 순번성격의 속성을 추가해서 식별자로 사용한다. 기존에 존재하는 속성중에서 선택한 식별자가 아닌 새롭게 추가한 속성으로 만든 식별자를 인조식별자라고 한다.

 

예시)주식별자로 적절하지 않은 이유 

주민번호 : 오류로 저장되면 변경가능성이 있어서 주식별자로 적절치 않음. 보안상 DB에 저장 못하게 한다.

휴대폰번호, 이메일 : 변경될수 있어 적철치 않음.예외적으로 이메일주소를 "계정은 변경 할 수 없다"는 업무요건을 만들면 이메일주소가 주식별자로 사용될수 있다.

고객번호 :  사원의 주식별자로 적합하지만 길다는 단점이 있다.

 

인조식별자 속성에는 의미 없는 번호를 사용한다.

업무식별자를 주식별자로 사용해야 업무가 더욱 명확해지는 것이 일반적이다. 하지만 사원번호 속성같은 인조식별자는 사원을 관리하기 위한 번호로써 오히려 업무를 더욱 명확하게 만들기도 한다. 고객번호, 부서번호, 상품번호 같이 실체 엔터티에 인조식별자가 많이 사용되는 이유이기도 하다.

 

인조식별자를 사용하면 주식별자가 단순해진다. 주식별자가 단순해지면 외래식별자도 단순해져 모델이 전체적으로 단순해진다. 조인과 쿼리문도 단순해지고 구문실수도 적어진다.

인조식별자는 업무와의 결합도를 감소시켜 결과적으로 모델의 확장성을 증가시키기도 한다. 업무변경이 예상된다면 인조식별자를 사용하여 유연한 모델이 되도록 해야 한다.

 

인조식별자를 잘 못 사용하면 물리적으로만 단순해질 뿐 업무식별자의 혼동만 유발하고, 모델을 복잡하게 만드는 것일 수도 있다. 업무식별자를 사용하지 않으면 엔터티 의미가 희석될 수도 있고, 인조식별자만 봐서는 새로운 인스턴스가 생성되는 기준을 알 수 없다는 것 또한 큰단점이다.

인조식별자는 주로 검색조건에 사용되지 않는 단점이 있다. 업무설계에 따라 달라지지만, 인조식별자는 무의미한 데이터이기 때문에 검색에 사용되지 않고, 주민등록번호 같은 유의미한 데이터가 검색에 사용된다.

인조식별자를 채택하면 업무식별자에 유니크한 인덱스를 생성해야 하므로 인덱스를 하나더 관리해야 한다.

 

인조식별자 오용하는 두가지

- 인조식별자의 무분별한 사용. 웬만하면 인조식별자로 사용하는 경향

- 인조식별자에 의미를 부여하는 것. 인조식별자는 적당한 후보가 없어서 만든속성인데 자체적인 의미는 없다. 하지만 체계를 만들고 의미를 부여해서 사용하곤 한다. 예외적으로 가독성이 필수적이면서 체계가바뀌지 않을때는 사용할 수도 있다. 

 

인조식별자 선정 순서

후보식별자 도출(업무식별자) → 도출된 후보식별자 중에 주식별자로 적당한 후보가 있는지 검토    적당한 후보가 없다면 인조식별자 사용

 

인조식별자 결정 시기

늦게 결정해서 문제가 되는 것은 아니고, 제대로 검토하지 않고 결정하는 경우가 아니라면 빨리 결정해서 문제될꺼는 없다.

하위엔터티가 많은 주요 엔터티는 가능한 빨리 결정하는 것이 좋다. 모델링이 완료되는 시점에 주식별자가 바뀐다면 하위엔터티에 많은 영향을 미치므로, 개념모델에 최소한 주식별자가 포함되어야 한다.

 

주식별자는 자신의 엔터티 뿐만 아니라 타 엔터티와도 밀접하게 연관돼 있기때문에 엔터티에 미치는 영향을 최소화 하는 방향으로 고민해야 한다.

 

업무식별자 사용이 원칙이어야 하며, 몇가지 경우에만 인조식별자를 채택한다.

복잡한 주식별자를 식별자로 상속한 모델 & 복잡한 주식별자를 속성으로 상속/인조식별자 채택

 

인조식별자를 사용해야 좋을떄

-주식별자가 복잡하면서 하위엔터티가 다수일떄

계좌엔터티는 하위엔터티가 상당히 많기 떄문에 주식별자가 복잡하면 하위엔터티도 복잡해진다. 단순하게 계좌번호라는 인조식별자를 채택하는 것이 모델을 단순하게 만든다.

-업무를 직관적으로 만들어 주는 번호를 사용할때

주식별자만 보고 업무를 알게 할 필요는 없지만

계좌 엔터티에 주식별자를 보면 어떤데이터를 관리하는지 알기 어렵다. 고객,계좌상품번호, 개설일자 속성을 주식별자를 사용하는 엔터티는 계좌말고도 더 존재할 수 있다.

-적당한 후부식별자가 없을떄

후보식별자가 없어 새로운 인스턴스를 추가할 기준이 없는 것이다. 유니크 인덱스를 생성 할 수 없어 인스턴스가 생성되는 기준을 명확히 알 수 없다. 중요도가 떨어지는 일부 엔터티에 대해서만 후보식별자 도출을 포기하고 인조식별자를 채택할 수 있다.

- 모델을 유연하게 설계해야 할때

 업무식별자를 주식별자로 사용한 상태에서 주식별자가 변경될 정도로 업무가 바뀌더라도 주식별자를 변경하기 어렵다. 하위 엔터티가 있으면 더욱 어려워진다. 이때 인주식별자를 사용한 상태라면 주식별자는 변함없이 업무 식별자에 생성한 유니크 인덱스만 변경하면 된다.

- 업무식별자 값이 변경될 가능성이 있을때

- 업무식별자 값에 널값이 포함될 수 있을때

- 업무식별자 길이가 길때

- 업무식별자의 값에 보안을 적용해야 할때

 

 

 

 

 

 

 

 

 

 

728x90