본문 바로가기

Data architecture/Model

[Model] 주식별자(Primary Identifier) 선정

1. 주식별자(Primary Identifier)  선정 원칙

 - 주식별자 속성이 변경되지 않아야 함

  → 업무가 변경되어 주식별자가 변경될 여지가 있다면 인조식별자 채택 검토

  → 가장 중요한 원칙으로, 엔터티를 명확하게 분석하고 정의하여 주식별자가 변경되지 않도록 선정

 

 - 주식별자 속성값이 변경되지 않아야 함

  → 주식별자 속성이 바뀌는 것보다 더 심각한 문제

  → 종속자(Depedent)속성, 추출속성, String속성, 횟수/금액 도메인 속성 등의 변경 여지가 있는 속성은 부적절

  → 자식엔터티 존재 시 주식별자 속성값이 변경되면 타 엔터티 내 외래식별자 값도 변경해야 하기 때문에 각종 문제 발생

  → 단, 이력관리 엔터티 등의 사유로 자식 엔터티가 미존재하는 경우 주식별자 값이 변경되어도 문제되지 않을 수 있다.

 

 - 최소한의 속성으로 구성

  → 주식별자를 구성하는 속성이 많아지면 가독성이 떨어짐

  → 관계 상속이 깊어질수록 하위엔터티의 주식별자 속성이 늘어날 수 있음

  → Join 구문이 복잡해져서 SQL이 길어짐(Index 측면에서도 크기를 줄이는게 좋음)

  → 복합주식별자 채택 시 성능 고려해서 속성 순서 정해야함(Where 절에 사용되며, 분포도가 좋은 속성이 선행)

 

 - 슈퍼식별자 사용 금지

  → 주식별자를 구성하는 속성은 최소가 좋음

  → 즉, 삭제해도 되는 속성을 주식별자에 포함시키지 않는 것이 당연함

 

 - 업무적 활용도가 높은 속성 사용

  → 업무적으로 자주 사용될 가능성이 큰 속성은 그 해당 속성으로 조회가 많다는 것임

  → 너무 많은 속성으로 구성하지 않고, 업무에서 자주 사용되는 업무식별자를 주식별자로 구성하는게 Best

 

 - 인조식별자는 의미부여 하지 않고, 속성에 종속되지 않아야 함 

  → 인조식별자는 무의미하게 순차적으로 증가하는 일련번호 형태가 Best

  → 업무적인 의미가 존재한다면 속성으로 관리

  → 만약 인조식별자에 의미를 부여하더라도 속성에 종속된 의미를 부여하는건 절대 피해야 함

 

 - 주식별자 길이는 최소한의 길이로 사용

  → 주식별자가 길면 많은 블록을 사용하고, 인덱스 깊이(Depth)를 깊게 만들기에 저장공간과 성능을 고려해야 함

  → 주식별자에 어떠한 체계도 없다면 VARCHAR 타입보단 NUMBER 타입이 더 효율적

 

 - 주식별자 속성값엔 논리적으로 Null 값이 존재하지 않아야 함

  → 주식별자는 당연히 물리적으로 Null 값을 사용할 수 없으나, Default 값으로 Null을 대신하는 알 수 없는 데이터 사용 多

  → 엔터티를 통합하는 경우를 제외하곤 주식별자 값이 논리적으로도 Null 값이 사용되지 않아야 함

 

 - 주식별자 속성값은 가능한 고정길이 채택

  → 고정길이를 사용하는 것이 CHAR 타입을 선택해야 하는 것은 아님(CHAR 타입은 어떤 상황에서도 이득이 없음)

  → 베타속성의 경우 값의 길이가 달라질 수 있으나, 가능한 길이를 같게 선정(성격을 더욱 명확히 하기 위함)

 

 - 업무식별자와 인조식별자를 혼합해서 사용하지 않아야 함

  → 부분 인조식별자가 사용되면 업무식별자를 파악하기 어려워 가독성이 떨어짐(인스턴스 생성기준 불명확)

  → 업무식별자를 주식별자로 선정하는 것이 가장 좋으나, 효율 측면에서 인조식별자를 사용할 순 있음

  → 즉, 인조식별자 사용 자체를 지양하는 것이 아닌, 업무식별자만 쓰거나, 인조식별자만 쓰는 것이 바람직

 

2. 후보식별자 중 주식별자 선정 기준

 - 시간이 지나도 값이 바뀌지 않을 후보식별자

 - 논리적으로도 Null이 없는 후보식별자

 - 속성 길이가 짧고, 체계가 존재하지 않는 간결한 형태의 후보식별자

 - 복합식별자 보단, 단일식별자

 - 업무를 대표할 수 있는(업무식별자 역할) 후보식별자

 - 값이 암호화되지 않는(주민등록번호 등이 아닌) 후보식별자

 

3. 인조식별자 채택 기준

 - 업무식별자가 여러 속성으로 구성될 때

 - 업무식별자 혹은 업무식별자 값이 변경될 여지가 있을 때 

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

 - 업무식별자에 체계(의미)가 존재할 때

 - 업무식별자 길이를 줄일 필요가 있을 때

 - 시스템 내부적으로만 사용할 인조식별자를 도입할 때

 - 업무식별자 값에 보안 적용이 필요할 때

 

4. 주식별자 선정 절차