순번 속성 대신 인조식별자를 사용하는 방법론
본질식별자에 발생시각 속성이 있을 때, 물리적으로 동일 시각에 여러 인스턴스가 발생하여 유일성이 깨지는 문제를 해결하기 위해
순번을 부분 인조식별자를 추가하는 경우가 있다.식별자를 이렇게 설계할 경우, 순번 속성의 추가가 식별자의 수를 늘리고 성능에 악영향을 줄 수 있다. 이때 일련번호성 인조식별자를 도출하여 여기에 순번의 역할을 부여하면 본질식별자에 순번 속성을 추가하지 않으면서도 유일성(엔터티 무결성)을 유지할 수 있다. (어차피 도출할 인조식별자라면 부분 인조식별자 말고 전체 인조식별자*를 도출하자는 아이디어)
본질식별자에 UK(Unique Key)를 설정하는 규칙/컨벤션을 가지고 있었다면, 이 경우에는 설정하는 것이 의미가 없다. PK가 자력으로 Unique하므로 PK를 포함하여 구성한 복합 UK는 항상 Super UK가 되기 때문이다.
예시
- 순번 속성을 사용하는 본질식별자
| 주문 엔터티 | 본질식별자 의미 |
| #%고객ID | 누가 |
| #%상품ID | 무엇을 |
| #%주문일자 | 언제 |
| #%주문순번 | 언제2(시각의 순서를 구별) |
- 전체 인조식별자를 사용
| 주문 엔터티 | 본질식별자 의미 |
| #%주문번호 | 언제2(시각의 순서를 구별) |
| %고객ID | 누가 |
| %상품ID | 무엇을 |
| %주문일자 | 언제 |
※ #은 PK, %는 본질식별자임
순번 속성 대신 전체 인조식별자 사용시 상대적 장단점
장점
엔터티 내 순번 속성 하나를 없앨 수 있음
전체 인조식별자 도출로 인해 PK 구성 컬럼 수가 1개로 간소화됨
순번 속성이 필요한 경우는 본질식별자에 시간의 개념까지 필요하다는 것이므로 식별자가 3개 이상으로 구성될 가능성이 매우 높음. 따라서 원래 인조식별자 도출이 더 유리할 가능성이 높은 경우임인덱스 크기가 작음
주문순번은 조건절에서 검색할 일이 없으므로, PK 인덱스에 있어도 사용되지 않고 인덱스 크기만 크게 만듦인조식별자의 일반적 장점들(e.g., 개발생산성 ↑, 식별자 상속이 용이함 등)
단점
- 본질식별자를 사용하지 않음으로써 발생하는 일반적 단점들(e.g., 식별자의 데이터 가치 없어짐, 조상 엔터티 참조 어려움 등)
주의사항
이력관리를 위해 사용하는 순번 속성은 전체 인조식별자로 대체하면 안 된다. 여기서의 순번은 동일 인스턴스(마스터 엔터티의 PK) 내에서 시간 순서를 구별하는 용도이며, 식별하는 인스턴스(PK) 자체가 달라져서는 안 되기 때문이다. 따라서 이 방법론의 적용은 일반적으로 행위시점을 본질식별자로 포함할 것이 고려되는 행위 엔터티가 대상이 될 것이다.
* 전체 인조식별자: 이 문서에서는 "부분 인조식별자"와 구별이 필요한 경우, 엔터티의 주식별자로 도출한 인조식별자를 "전체 인조식별자"로 표현한다.