1 데이터 모델링의 이해-  5절 식별자


1. 식별자 개념 : 하나의 엔터티에 구성되어 있는 여러 개의 속성 중에 엔터티를 대표할 수 있는 속성을 의미한다. 

하나의 엔터티는 반드시 하나의 유일한 식별자가 존재해야한다.

* 식별자라는 용어는 업무적으로 구분이 되는 정보로 생각할 수 있으므로 논리적 모델링 단계에서 사용하며 

Key는 데이터베이스 테이블에 접근을 위한 매개체로서 물리 데이터 모델링 단계에서 사용한다.


2.  식별자의 특징 : 주식별자와 외부식별자에 따라 특성이 다소 차이가 있다.

- 주식별자의 특징

 특징

내용

비고 

 유일성

주식별자에 의해 엔터티 내에 모든 인스턴스들을 유일하게 구분함 

사원번호는 모든직원들에 대해 개인별로 고유하게 부여됨. 

 최소성

주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수가 되어야함 

사원번호만으로도 고유한 구조인데 사원분류코드+사원번호로 식별자가 구성될경우 부적절한 주 식별자 구조임. 

 불변성

주식별자가 한 번 특정 엔터티에 지정되면그 식별자의 값은 변하지 않아야함. 

사원번호의 값이 변한다는 의미는 이전기록이 말소되고 새로운 기록이 발생되는 개념임 

 존재성

주식별자가 지정되면 반드시 데이터 값이존재 (Null안됨) 

사원번호 없는 회사직원은 있을 수 없다

 


3.식별자 분류 및 표기법

가. 식별자 분류

- 엔터티 내에서 대표성을 가지는가에 따라 주식별자와 보조식별자로 구분.

- 엔터티 내에서 스스로 생성되었는지 여부에 따라 내부식별자와 외부식별자로 구분

- 단일 속성으로 식별이 되는가에 따라 단일식별자와 복합식별자로 구분


 분류

식별자 

설명 

대표성여부 

주식별자

엔터티 내에서 각 어커런스를 구분할 수 있는 구분자이며, 타 엔터티와 참조관계를 연결할 수 있는 식별자 

보조식별자

엔터티 내에서 각 어커런스를 구분할 수 있는 구분자이나 대표성을 가지지 못해 참조관계 연결을 못함. 

스스로 생성여부

내부식별자 

엔터티 내부에서 스스로 만들어지는 식별자 

외부식별자

타 엔터티와의 관계를 통해 타 엔터티로부터 받아오는 식별자 

속성의수

단일식별자

하나의 속성으로 구성된 식별자

복합식별자

두 개 이상의 속성으로 구성된 식별자

대체여부

본질식별자 

업무에 의해 만들어지는 식별자 

인조식별자

업무적으로 만들어지지는 않지만 원조 식별자가 복잡한 구성을 가지고 있기 때문에 인위적으로 만든 식별자 

 



4. 주식별자 도출기준

- 해당 업무에서 자주 이용되는 속성

ex) 직원이라는 엔터티에서 주민등록번호와 사원번호가 존재할 수 있다.

사원번호가 그 회사에서 직원을 관리할 때 흔히 사용되는 번호이므로 사원번호를 주 식별자로 사용하고

주민벊호를 보조식별자로 사용할 수 있다.


- 명칭, 내역 등과 같이 이름으로 기술되는 것들은 가능하면 주식별자로 지정하지 않는다.

ex) 부서이름이 100개 있다고 가정할 때, 부서이름은 유일하게 구별할 수 있지만 주식별자로 사용할 경우 Where절에 기술해야하는 경우가 발생할 수 있으므로 일련번호나 코드를 사용한다.


- 복합으로 주식별자로 구성할 경우 너무 많은 속성이 포함되지 않도록 한다.


5. 식별자관계와 비식별자 관계에 따른 식별자.

가. 식별자관계와 비식별자 관계의 결정

- 외부식별자는 자기 자신이 엔터티에서 필요한 속성이 아니라 다른 엔터티와의 관계를 통해 자식 쪽에 엔터티에 생성되는 속성을 외부식별자라 하며 데이터베이스 생성시에 Foreign Key 역할을 한다.


나. 식별자 관계

- 부모로부터 받은 식별자를 자식 엔터티의 주식별자로 이용하는 경우는 Null 값이 오면 안되므로 반드시 부모엔터티가 생성되어야 자기 자신의 엔터티가 생성되는 경우이다.

- 부모로부터 받은 속성을 자식엔터티가 모두 사용하고 그것만으로 주식별자로 사용한다면 부모엔터티와 자식엔터티의 관계는 1:1 관계가 된다.

- 부모로부터 받은 속성을 포함하여 다른 부모엔터티에서 받은 속성을 포함하거나 스스로 가지고 있는 속성과 함께 주 식별자로 구성이 될 경우는 1:M  관계가 된다.

=> 자식엔터티의 주식별자로 부모의 주식별자가 상속되는 경우를 식별자 관계라고 지칭한다.


다. 비식별자 관계

-부모엔터티로부터 속성을 받았지만, 자식엔터티의 주식별자로 사용하지 않고 일반적인 속성으로만 사용하는 경우를 비 식별자관계 라고 한다.

- 다음의 네 가지 경우에 비식별자 관계에 의한 외부속성을 생성한다.

1) 자식엔터티에서 받은 속성이 반드시 필수가 아니여도 무방하기 때문에 부모 없는 자식이 생성될 수 있는 경우이다.

2) 엔터티별로 데이터의 생명주기를 다르게 관리할 경우이다. 부모엔터티의 인스턴스가 자식의 엔터티와 관계를 가지고 있었지만, 자식만 남겨두고 먼저 소멸될 수 있는 경우가 이에 해당됨.

(방안으로 물리데이터베이스 생성 시 FK를 연결하지 앟는 임시적인 방법도 사용하지만, 데이터 모델상에서 관계를 비식별자 관계로 조정하는것이 가장 좋은 방법이다.)

3)여러 개의 엔터티가 하나의 엔터티로 통합되어 표현되었는데 각각의 엔터티가 별도의 관계를 가질 때이며 이에 해당한다.

4) 자식엔터티에 주식별자로 사용하여도 되지만, 자식엔터티에서 별도의 주식별자를 생성하는것이 더 유리하다고 판단되는경우 비식별자 관계에 의한 외부식별자로 표기한다.


라. 식별자 관계로만 설정할 경우의 문제점.

- WHERE 절이 매우길어질 수 있다.

- 식별자 관계로만 연결된 데이터 모댈의 특징은 주식별자 속성이 지속적으로 증가할 수 밖에 없는 구조로서 개발자 복잡성과 오류가능성을 유발시킬 수 있는 요인이 될 수 있다.


마. 비식별자 관계로만 설정할 경우의 문제점.

- 자식엔터티로 상속이 되지않아서 자식엔터티에서 데이터를 처리할 때 쓸데없이 부모엔터티까지 찾아가야 하는 경우가 발생한다.


바. 식별자관계와 비식별자관계 모델링

1) 비삭별자관계 선택 프로세스

- 다음 흐름에 따라 비식별자 관계를 선정한다면 합리적으로 관계를 설정하는 모습이 될 수 있다.

- 기본적으로 식별자관계로 모든 관계가 연결되면서 다음 조건에 해당할 경우 비식별자 관계로 조정하면 된다.


 


* 자식엔터티의 독립된 주 식별자가 필요한지 분석하는것이 가장 중요하다. 독립적으로 주식별자를 구성한다는 의미는 업무적 필요성과 성능상 필요여부를 모두 포함하는 의미로 이해하면 된다.


2) 식별자와 비식별자관계 비교

강한 관계인 식별자관계와 약한 관계인 비식별자관계를 비교.

항목 

식별자 관계 

비식별자 관계 

목적

강한 연결관계 표현 

약한 연결관계 표현 

자식 주식별자 영향 

자식 주식별자의 구성에 포함됨 

자식 일반 속성에 포함됨 

표기법

실선표현 

점선표현 

연결 고려 사항

반드시 부모엔터티 종속

자식 주식별자의 구성에 포함됨  

상속받은 주식별자속성을 타 엔터티에 이전 필요

약한종속관계

자식 주식별자 구성을 독립적으로 구성

자식 주식별자구성에 부모 주식별자 부분필요

상속받은 주식별자속성을 타 엔터티에 차단 필요

부모쪽의 관계참여가 선택관계