본문 바로가기

DB

[DB] 식별자의 개념, 특징, 분류

0. 식별자(Identifier) 개념

  • 식별자란 하나의 엔터티에 구성되어 있는 여러 개의 속성 중에 엔터티를 대표할 수 있는 속성을 의미한다.
  • 하나의 엔터티 안에는 반드시 유일한 식별자가 존재해야 한다.
  • 식별자라는 용어는 논리 데이터 모델링에서 사용하고, 키(Key)는 물리 데이터 모델링 단계에서 사용된다.

 

1. 주식별자의 특징

 

 1-1 유일성

  • 주식별자에 의해 엔터티 내에 모든 인스턴스들을 유일하게 구분한다.                                         
  • ex) 사원번호라는 주식별자가 모든 직원들에 대해 고유하게 부여된다.

 

1-2 최소성

  • 주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수가 되어야 한다.
  • ex) 사원번호만으로도 판별 가능한 고유한 구조인데, 부적절하게 사원분류코드 + 사원번호를 이용한다.

 

 1-3 불변성

  • 주식별자가 특정 엔터티에 지정되면, 그 값은 변하지 않아야 함.
  • ex) 사원번호의 값이 변하려면, 그동안의 기록이 사라지고, 새로운 기록이 발생해야 한다.

 

1-4 존재성

  • 주식별자로 지정되면 데이터 값이 존재해야 한다. (Null 값은 허용하지 않는다.)
  • ex) 사원번호 없는 회사 직원은 있을 수 없다.

 

2. 식별자의 4가지 분류

 

 2-1 대표성 여부

 

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

 ex) 부서번호, 사번, 주문번호

 

- 보조식별자 : 엔터티 내에서 각 어커런스를 구분할 수 있으나, 대표성을 가지지 못해 참조관계를 연결하지 못한다.

 ex) 주민등록번호, (사원 엔터티에서의 주식별자는 주민번호보다 사번이 더 알맞다.)

 

 

 2-2 스스로 생성 여부

 

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

 ex) 부서번호, 사번, 주문번호 (각각은 부서에서, 사원, 구매신청 엔터티에서 스스로 만들어진다.)

 

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

 ex) 사원 엔터티의 부서번호 (사원 엔터티와 부서 엔터티는 부서번호로 관계되어 있다.)

 

 

 2-3 속성의 수

 

- 단일식별자 : 하나의 속성으로 구성된 식별자

 ex) 부서번호, 사번, 주문번호

 

- 복합식별자 : 둘 이상의 속성으로 구성된 식별자

 ex) 교육이력 엔터티에서 사번과 수강일자 두 속성을 이용해 식별자 역할을 한다.

 

 

 2-4 대체 여부

 

 - 본질식별자 : 업무에 의해 만들어지는 식별자

 ex) 부서번호, 사번, 

 

 - 인조식별자 : 업무적으로 만들어지지는 않았지만, 원조식별자가 복잡한 구성을 가지고 있어 인위적으로 만들어짐.

 ex) 주문번호 (기존에는 사번 + 주문일자 + 순번으로 불러와서 처리해야 해서, 인위적으로 주문번호만 처리하게 함)

 

 

3. 주식별자 도출 기준

  • 자주 이용하는 속성을 주식별자로 지정한다.
  • 명칭, 내역 등 이름으로 기술되는 것들은 가능하면 주식별자로 지정하지 않는다.
  • 복합으로 주식별자를 구성할 경우 너무 많은 속성이 포함되지 않도록 한다.

 

4. 식별자 관계

 

 4-1 식별자 관계 개념

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

 

 4-2 식별자 관계로만 설정할 경우 문제점

  • 예를 들어 3개의 엔터티가 할아버지-어머니-아들과 같이 상속된다고 생각해보자. 할아버지는 주식별자가 1개, 어머니는 할아버지에게 상속받아 주식별자가 2개, 아들은 어머니한테 상속받아 주식별자가 3개가 될 것이다.
  • 이처럼 처음에는 1개의 PK속성이었으나, 계속 +1씩 늘어난 걸 볼 수 있다.
  • 식별자 관계만으로 연결될 경우 주식별자 속성이 지속적으로 증가하고, 복잡성과 오류 가능성이 증가한다.  

 

 4-3 식별자 연결을 고려해야 할 때

  • 자식 엔터티가 반드시 부모엔터티에 종속되어야 할 때
  • 자식 주식별자 구성에 부모 주식별자가 필요할 때
  • 상속받은 주식별자 속성을 타 엔터티에 이전 필요할 때
  • 강한 연결관계를 표현해야 할 때 

 

5. 비식별자 관계

 

 5-1 비식별자 관계 개념

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

 

 5-2 비식별자 관계로만 설정할 경우 문제점

  • 예를 들어 기계 1,2,3이 있고 비식별자 관계로만 연결되어 있다면, 기계 3에서 기계 1의 어떤 속성을 조회하려고 한다면 Where 기계3.속성 = 기계2.속성 / AND 기계2.속성= 기계1.속성처럼 많은 조인이 걸리게 된다.
  • 그에 따라 복잡성이 증가하고 성능이 저하되게 된다.
  • 반면 식별자 관계로 설정했다면 바로 다이렉트로 조회 조건을 이용하여 조회할 수 있다.   

 

 5-3 비식별자 관계를 고려해야 할 때

  • 약한 종속관계가 필요할 때
  • 자식 주식별자구성을 독립적으로 구성해야 할 때
  • 자식 주식별자 구성에 부모 주식별자가 부분적으로 필요할 때
  • 상속받은 주식별자속성을 타 엔터티에 차단 필요할 때
  • 부모쪽의 관계참여가 선택관계일 때