자격증/SQLD

SQLD / 과목 1 / 제 1장 데이터 모델링의 이해 / 식별자

CBJ 2023. 3. 7. 15:57

1. 식별자(Identifiers) 개념

엔터티는 인스턴스들의 집합. 여러 개의 집합체를 담고 있는 하나의 통에서 각각을 구분할 수 있는 논리적인 이름이 있어야 함. 하나의 엔터티에 구성되어 있는 여러 개의 속성 중에 엔터티를 대표할 수 있는 속성을 의미하며 하나의 엔터티는 반드시 하나의 유일한 식별자가 존재해야 한다.

2. 식별자의 특징

  • 유일성
    주식별자에 의해 엔터티 내에 모든 인스턴스들이 유일하게 구분되어야 한다.
    ex) 사원 번호가 주 식별자가 모든 직원들에 대해 개인별로 고유하게 부여됨.
  • 최소성
    주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수가 되어야 한다.
    ex) 사원분류코드+사원번호로 식별자가 구성될 경우 부적절한 주식별자 구조임.
  • 불변성
    지정된 주식별자의 값은 자주 변하지 않는 것이어야 한다.
    ex) 사원번호의 값이 변한다는 의미는 이전기록이 말소되고 새로운 기록이 발생되는 개념임
  • 존재성
    주식별자가 지정이 되면 반드시 값이 들어와야 한다.
    ex) 사원번호 없는 회사직원은 있을 수 없음.

 

대표식별자

주식별자의 특징과 일치하지만 외부식별자는 별도의 특징을 가지고 있다.

 

외부식별자

주식별자 특징과 일치하지 않으며 참조무결성 제약조건(Referential Integrity)에 따른 특징을 가지고 있다.

3. 식별자 분류 및 표기법

식별자 분류

식별자 표기법

 

4. 주식별자 도출기준

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

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

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

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

 

식별자관계

부모로부터 받은 식별자를 자식엔터티의 주식별자로 이용하는 경우 Null값이 오면 안 되므로 반드시 부모엔터티가 생성되어야 자기 자신의 엔터티가 생성되는 경우. 자식 엔터티의 주식별자로 부모의 주식별자가 상속이 되는 경우를 식별자 관계(Identifying Relationship)라고 한다.

 

비식별자관계

부모엔터티로부터 속성을 받았지만 자식엔터티의 주식별자로 사용하지 않고 일반적인 속성으로만 사용하는 경우.

비식별자 관계(Non-Identifying Relationship)라고 하며 다음의 네 가지 경우에 비식별자 관계에 의한 외부속성을 생성.

  • 부모 없는 자식이 생성될 수 있는 경우.
  • 엔터티별로 데이터의 생명주기(Life Cycle)를 다르게 관리할 경우.
  • 각각의 엔터티가 별도의 관계를 가질 경우.
  • 자식엔터티에서 별도의 주식별자를 생성하는 것이 유리할 경우

 

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

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

 

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

  • 엔터티 간의 관계를 비식별자로 설정하면 자식엔터티에서 데이터를 처리할 때 쓸데없이 무보엔터티까지 찾아가야 하는 경우가 발생
  • 불필요한 조인이 다량으로 유발되면서 SQL구문도 길어지고 성능이 저하되는 현상이 발생
  • SQL구문에 많은 조인이 걸리게 되고 그에 따라 복잡성이 증가하고 성능이 저하되는 현상 발생

 

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

  • 비식별자관계 선택 프로세스

  • 식별자와 비식별자관계 비교

  • 식별자와 비식별자를 적용한 데이터 모델