본문 바로가기

데이터 Story/모델링 매뉴얼

업무 식별자를 도출할 때는 논리적으로 인스턴스를 구분할 수 있는지로 검토

업무 식별자를 도출할 때는 논리적으로 인스턴스를 구분할 수 있는지로 따진다. 물리적으로 인스턴스를 구분할 수 있는지로 분석하지 않는다.

 

[그림1] 선수소속구단 엔터티는 선수가 소속된 구단을 관리하는 행위 엔터티다.

[그림1]

 

선수는 동시에 여러 구단에 속할 수 있으며, 소속 구단은 매년 변경될 수 있고 기존의 속했던 구단으로 다시 소속될 수 있다. 반대로 구단에도 여러 선수가 속할 수 있다.

 

위와 같은 요건을 만족시키는 업무 식별자는 선수소속구단 엔터티와 같이 선수번호+구단번호+소속일자 속성이다. 즉 선수소속구단 엔터티의 인스턴스는 논리적으로 선수와 구단, 그리고 소속일자에 의해서 구분된다. 선수번호/구단번호/소속일자 속성이 달라야 인스턴스를 생성할 수 있다. 또한 포지션구분코드, 등번호 속성은 선수번호/구단번호/소속일자 속성 세 개에 종속돼 있다. 즉 세 속성이 변경돼야 포지션구분코드 속성과 등번호 속성이 달라진다는 것을 의미한다.

 

만약 위와 같은 업무 요건에 업무 식별자를 사원번호+소속일시 속성으로 도출하더라도 인스턴스를 생성하고 사용하는 데 문제가 없을 수 있다. 하지만 이는 논리적으로 인스턴스를 구분하는 게 아니라 물리적으로 인스턴스를 구분하는 것이다. 이와 같이 물리적으로 인스턴스를 식별하는 대표적인 속성은 일시(일자), 번호, 순번 속성이다.

 

업무 식별자를 도출할 때 일시 속성은 주의해야 한다. 행위 엔터티일 때는 반복되는 행위를 구분하기 위해 일시 속성이 논리적으로 의미가 있는 속성이라 업무 식별자에 포함된다. 이때 주의할 것은 다른 업무 식별자 속성을 도출한 후에 맨 마지막에 일자 속성을 추가하는 것이다.

 

번호 속성은 그 자체로 식별 번호를 의미하므로 주로 실체 엔터티의 인조 식별자가 되며, 필요 시 행위 엔터티도 인조 식별자로 사용할 수 있어 선수소속구단 엔터티의 주 식별자가 번호 속성이 될 수 있다. 하지만 선수소속구단 엔터티의 업무 식별자가 번호 속성이 될 수는 없다.

 

순번 속성은 다른 속성과 함께 사용하는 물리적 속성이라 주의해야 한다. 선수소속구단 엔터티의 업무 식별자를 사원번호+소속순번 등으로 도출하는 것은 의미가 없다. 순번 속성은 사용이 제한적이고 인조 식별자에 포함되기 때문에 업무 식별자에 사용할 수 없다.

 

만약 선수가 구단에 동시에 속할 수 없다는 업무 요건이 있다면 업무 식별자는 아래와 같다.

[그림2]

 

이 경우 논리적인 업무 식별자는 선수와 입단일자가 된다. 따라서 업무 식별자를 사용하는 주 식별자는 선수번호+소속일자로 설계할 수 있다

 

만약 선수가 동시에 여러 구단에 속할 수 없지만, 하루에도 여러 번 구단을 바꿀 수 있다면 업무 식별자는 아래와 같다.

[그림3]

 

하루에도 여러 번 구단을 바꿀 수 있기 때문에 소속일시 속성이 업무 식별자에 포함된다.

 

일시 속성이 주 식별자에 포함되면 불편하기 때문에 일자 속성을 사용한다면, 일자별 여러 구단이 해당될 수 있기 때문에 선수번호+소속일자+구단번호 속성이 업무 식별자가 된다. [그림1] 선수소속구단 엔터티와 업무 식별자가 유사해진다.

 

물리적으로 인스턴스를 구분하는 대표적인 경우는 일시나 타임스탬프, 번호 등의 속성이기 때문에 업무 식별자를 도출할 때는 이런 속성을 주의해야 한다. 데이터 성격 상 이미 인스턴스를 구분하고 식별할 수 있는 위와 같은 속성을 업무 식별자로 설계하면 다른 속성을 업무 식별자로 도출하기 힘들다.

 

업무 식별자를 도출할 때는 논리적으로 따져야 한다. 물리적으로만 도출하면 업무 식별자를 제대로 도출하기 어렵고, 업무 식별자가 불분명하면 엔터티의 성격도 명확하지 않게 된다.