본문 바로가기

데이터 사이언스/SQL

[SQLD 학습 자료 요약] 데이터 모델링의 이해 1.5. 식별자

본 문서의 내용은 한국데이터산업진흥원에서 펴낸 SQL 전문가 가이드를 기반으로 자격증 취득에 도움이 될 개념을 정리한 것입니다.

SQL 전문가 가이드
국내도서
저자 : 한국데이터산업진흥원
출판 : 한국데이터산업진흥원 2020.05.29
상세보기

 

5. 식별자

1. 식별자 (Identifiers) 개념

엔터티를 대표할 수 있는 속성

 

식별자라는 용어는 업무적으로 구분이 되는 정보로 생각할 수 있으므로 논리 데이터 모델링 단계에서 사용하고, 키는 데이터베이스 테이블에 접근을 위한 매개체로서 물리 데이터 모델링 단계에서 사용한다.

 


2. 식별자의 특징

  • 유일성

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

  • 최소성

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

  • 불변성

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

  • 존재성

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

 

외부식별자의 경우, 참조무결성 제약조건에 따른 특징을 가지고 있다.

 


3. 식별자 분류 및 표기법

가. 식별자 분류

  • 대표성 여부

    1. 주식별자: 각 어커런스를 구분할 수 있고 참조관계를 연결할 수 있는 식별자
    2. 보조식별자: 각 어커런스를 구분할 수 있지만 대표성을 가지지 못해 참조관계 연결 X
  • 스스로 생성 여부

    1. 내부식별자: 내부에서 스스로 만들어지는 식별자
    2. 외부식별자: 타 엔터티와의 관계를 통해 받아오는 식별자
  • 속성의 수

    1. 단일식별자: 하나의 속성으로 구성된 식별자
    2. 복합식별자: 둘 이상의 속성으로 구성된 식별자
  • 대체 여부

    1. 본질식별자: 업무에 의해 만들어지는 식별자
    2. 인조식별자: 원조식별자가 복잡한 구성을 가져서 인위적으로 만든 식별자

 

나. 식별자 표기법

각 표기법에 따른 식별자 분류 (출처: SQL 전문가 가이드)

 


4. 주식별자 도출기준

가. 해당 업무에서 자주 이용되는 속성을 주식별자로 지정한다.

예를 들면, 직원이라는 엔터티가 있을 때 유일하게 식별가능한 속성으로는 주민등록번호와 사원번호가 존재할 수 있다. 사원번호가 그 회사에서 직원을 관리할 때 흔히 사용되므로 사원번호를 주식별자로 지정하고 주민등록번호는 보조식별자로 사용할 수 있다.

 

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

명칭이나 내역이 있고 인스턴스들을 식별할 수 있는 다른 구분자가 존재하지 않을 경우는 새로운 식별자를 생성하도록 한다. 보통 일련번호와 코드를 많이 사용한다.

 

다. 복합으로 주식별자 구성 시, 속성의 수가 너무 많아지지 않도록 한다.

일반적으로 주식별자의 속성의 개수가 많다는 것(일반적으로 7~8 개 이상)은 새로운 인조식별자(Artificial Identifier)를 생성하여 데이터 모델을 구성하는 것이 데이터 모델을 한층 더 단순하게 하고 애플리케이션을 개발할 때 조건절을 단순하게 할 수 있는 방법이 될 수 있다.

 


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

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

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

 

자식 엔터티에서 부모 엔터티로부터 받은 외부식별자를 자신의 주식별자로 이용할 것인지 또는 부모와 연결이 되는 속성으로서만 이용할 것인지를 결정해야 한다.

 

나. 식별자관계

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

 

부모로부터 받은 식별자를 자식엔터티의 주식별자로 이용하는 경우는 Null 값이 오면 안되므로 반드시 부모엔터티가 생성되어야 자기 자신의 엔터티가 생성되는 경우이다. 부모로부터 받은 속성을 자식엔터티가 모두 사용하고 그것만으로 주식별자로 사용한다면 부모엔터티와 자식엔터티의 관계는 1:1 의 관계가 될 것이고 만약 부모로부터 받은 속성을 포함하여 다른 부모엔터티에서 받은 속성을 포함하거나 스스로 가지고 있는 속성과 함께 주식별자로 구성되는 경우는 1:M 관계가 된다.

 

다. 비식별자관계

부모 엔터티로부터 속성을 받았지만, 자식 엔터티의 일반적인 속성으로만 사용하는 경우를 지칭한다.

 

  1. 받은 속성이 반드시 필수가 아니어도 무방하기 때문에 부모 없는 자식이 생성될 수 있는 경우
  2. 엔터티별로 데이터의 생명주기를 다르게 관리할 경우
  3. 여러 개의 엔터티가 하나로 통합되어 표현되었는데, 각각의 엔터티가 별도의 관계를 가지는 경우
  4. 자식 엔터티에서 별도의 주식별자를 생성하는 것이 더 유리하다고 판단될 경우

 

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

지속적으로 식별자 관계를 연결한 데이터 모델의 PK 속성의 수는 데이터 모델의 흐름이 길어질수록 증가할 수 밖에 없는 구조를 가지게 된다. 이는 개발 복잡성과 오류가능성을 유발시킬 수 있는 요인이 될 수 있다.

 

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

식별자와 비식별자 관계 비교 (출처: SQL 가이드)

조회 패턴을 보면 고작 점검번호=‘301’ 정도로서 간단하면서도 이 업무에서는 가장 근간이 되는 조회의 패턴 정보로 여겨지는 조건이다. 이 조건은 아마도 웬만한 업무처리에는 많이 포함될 것으로 보이는데 단순하게 걸리는 이 하나의 조회 조건도 왼쪽과 같이 비식별자 관계로만 데이터 모델링을 전개하다 보면 SQL 구문에 많은 조인이 걸리게 되고 그에 따라 복잡성이 증가하 고 성능이 저하되게 되는 것이다.

 

데이터 모델링을 전개할 때 각 엔터티 간의 관계를 비식별자 관계로 설정하면 이런 유형의 속성이 자식엔터티로 상속이 되지 않아 자식엔터티에서 데이터를 처리할 때 쓸데없이 부모엔터티까지 찾아가야 하는 경우가 발생된다.

 

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

1. 식별자관계 선택 프로세스

비식별자관계 설정 시 고려 사항 (출처: SQL 전문가 가이드)

 

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

식별자, 비식별자관계 비교 (출처: SQL 전문가 가이드)

 


↓SQL 전문가 가이드 요약 목록

더보기

 

따로 PDF 파일이 필요하신 분은 댓글을 통해 메일 주소 적어주시기 바랍니다.