데이터베이스(DataBase)/SQL 전문가 가이드 (2020 개정판)

[SQL 전문가 가이드] 1과목 - 제 5장. 식별자(Identifiers) 정리

JE_:) 2023. 5. 11. 16:18
728x90

 

 

 

1. 식별자(identifiers) 개념


 

 

엔터티(Entity)는 인스턴스(instance)의 집합이다.

 

여러 개의 집합체를 담고 있는 집합은 각각을 구분할 수 있는 논리적인 이름이 필요하다. 이러한 구분자를 식별자(Idetifier)라 한다. 

 

식별자란 하나의 엔터티에 구성되어 있는 여러 개의 속성 중에 엔터티를 대표할 수 있는 속성을 의미하며,

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

 

이때, 식별자와 키(Key)를 동일하게 생각할 수 있는데, 

식별자는 업무적으로 구분이 되는 정보로 (논리 데이터 모델링 단계에서 사용),

키는 데이터베이스 테이블에 접근하기 위한 매개체로 (물리 데이터 모델링 단계에서 사용) 구분한다.

 

 

 

 

# 데이터 모델링의 3단계, 개념 - 논리 - 물리 모델링

데이터 모델링 내용
개념적 데이터 모델링 추상화 수준이 높고, 업무 중심적이며, 포괄적인 수준의 모델링을 진행. 
전사적 데이터 모델링, EA 수립 시 많이 사용.
논리적 데이터 모델링 시스템으로 구축하고자 하는 업무에 대해 Key, 속성, 관계 등을 정확하게 표현.
재사용성이 높다.
물리적 데이터 모델링
실제로 데이터베이스에 이식할 수 있도록 성능, 저장 등 물리적인 성격을 고려하여 설계한다.
물리적 데이터 모델링으로 갈 수록 구체적인 수준이 된다.

 

 

 

* 더 자세한 내용은 하단 링크로 이동!

2023.04.04 - [데이터베이스(DataBase)/SQL 전문가 가이드 (2020 개정판)] - [SQL 전문가 가이드] 1과목 - 제 1장. 데이터 모델링(Data Modeling 의 이해 정리

 

[SQL 전문가 가이드] 1과목 - 제 1장. 데이터 모델링(Data Modeling 의 이해 정리

# 학습 목표 :) - 데이터 모델링(Data Modeling)의 기본적인 개념을 이해한다. - 엔터티(Entity), 속성(Atribute), 관계(relationship), 식별자(identity)에 대한 개념, 특징, 표기법, 명명법을 이해하고 익힌다. - 데

01-study-for-me.tistory.com

 

 

 


 

 

2. 식별자(Identifiers)의 특징


식별자는 '주식별자'인지, 아니면 '외부식별자'인지 등에 따라 특성에 다소 차이가 있다.

먼저, '주식별자'일 경우, 다음과 같은 특징을 갖는다.

 

 

 

  • 주식별자에 의해 엔터티내에 모든 인스턴스들이 유일하게 구분되어야 한다. (유일성)
  • 주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수가 되어야 한다. (최소성)
  • 지정된 주식별자의 값은 자주 변하지 않는 것이어야 한다. (불변성)
  • 주식별자가 지정이 되면 반드시 값이 들어와야 한다. (존재성)

 

 

주식별자의 특징
특징 내용 비고
유일성 주식별자에 의해 엔터티내 모든 인스턴스들을 유일하게 구분할 수 있어야 한다. ex> 사원번호, 주민번호 ...
최소성 주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수가 되어야 한다. ex> 고유한 사원번호를 가지고 있음에도,
사원분류코드 + 사원번호로 식별자가 구성되는 것은 부적절함.
불변성 주식별자가 한 번 특정 엔터티에 지정되면 그 식별자의 값은 변하지 않아야 한다. 사원번호의 값이 변하는 것은
이전 기록이 제거되고 새롭게 생성된다는 뜻이다.
존재성 주식별자가 지정되면 반드시 데이터 값이 존재해야 한다. (Null이 아닌 값) 사원번호가 없는 직원은 있을 수 없다.

 

 

'대체식별자'의 특징은 주식별자의 특징과 일치하다.

 

하지만 '외부식별자'의 경우, 주식별자와 특징이 일치하지 않으며 참조무결성 제약조건(Referential Integrity)에 따른 특징을 가진다. 

 

 

 


 

3. 식별자 분류 및 표기법

 

 

 

가. 식별자 분류


 

식별자의 종류는

 

① 자신의 엔터티 내에서 대표성을 가지는가,

② 엔터티 내에서 스스로 생성되었는가,

③ 단일 속성으로 식별이 되는가

④ 대체 여부(업무적으로 의미가 있던 식별자 속성을 대체하여 일련번호와 같이 새롭게 만드는 경우 등..)

 

위 처럼 구분할 수 있다.

 

[출처 : [DATA ON-AIR] - 식별자 중, 식별자 분류]

 

 

 

분류 식별자 설명
대표성 여부 주식별자 엔터티 내에서 각 어커런스를 구분할 수 있는 구분자이며, 타 엔터티와 참조관계를 연결할 수 있는 식별자
보조 식별자 엔터티 내에서 각 어커런스를 구분할 수 있는 구분자이나 대표성을 가지지 못해 참조 관계를 연결할 수 없는 식별자
스스로 생성 여부 내부식별자 엔터티 내부에서 스스로 만들어지는 식별자
외부식별자 타 엔터티와 관계를 통해 타 엔터티로부터 받아오는 식별자
속성의 수 단일식별자 하나의 속성으로 구성된 식별자
복합식별자 둘 이상의 속성으로 구성된 식별자
대체 여부 본질식별자
(= 원조식별자)
업무에 의해 만들어지는 식별자
인조식별자 업무적으로 만들어지지는 않지만 원조 식별자가 복잡한 구성을 가지고 있는 경우, 인위적으로 만들어진 식별자

 

 

 


 

 

나. 식별자 표기법


 

 

[출처 : [DATA ON-AIR] - 식별자 중, 식별자 표기법]

 

위 그림을 참고하여, 식별자의 특징 및 표기를 확인할 수 있다.

 

부서 Entity의 부서번호라는 instance는 '주식별자'(대표성 여부)로,
사원 Entity에서  '외부식별자'(스스로 생성여부)로 표현되어 있다.

사원 Entity의 사번과, 부서 Entity의 부서번호는
[ 내부식별자(스스로 생성 여부), 단일식별자(속성의 수), 원조식별자(또는 본질식별자, 대체여부) ]로도 분류할 수 있다.


 

 

 

 


 

 

4. 주식별자 도출기준


데이터 모델링 작업에서 중요한 작업 중 하나로, 주식별자를 도출하기 위한 기준을 정리하면 다음과 같다.

 

 

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

 

 

1. 해당 업무에서 자주 이용되는 속성을 주식별자로 지정하도록 함.

예를 들어, 회사에서 직원을 관리하는 엔티티를 생성하였을 때, 유일하게 식별 가능한 속성으로는 '주민등록번호'와 '사원번호'가 존재한다. 

이때, 회사라는 업무 환경에서는 직원을 관리할 떄 '사원번호'를 사용하므로,
이를 주식별자로 지정하고 '주민등록번호'를 보조식별자로 지정하여 사용할 수 있다.

 

 

2. 명칭, 내역 등과 같이 이름으로 기술되는 것은 피함

예를 들어, 회사에 부서가 100개가 있는 경우, 각각의 부서 이름은 유일하게 구별된다 하여도 이를 주식별자로 지정해서는 안된다. 만약 부서 이름을 주식별자로 선정하면, 데이터를 읽을 때 항상 부서 이름이 where 조건절에 함께 작성되어야 한다. 이때, 부서 이름은 긴 경우 20자 이상이 될 수도 있기에, 조건절에 정확한 부서 이름을 적어넣기 어려울 것이다.


이처럼, 명칭이나 내역이 있고 인스턴스를 식별할 수 있는 다른 구분자가 존재하지 않는 경우,
새로운 식별자를 생성하여 사용한다. (대체 여부)


① 부서명 대신, 부서 코드를 추가하여 코드엔터티에 등록한 후, 부서코드로 주식별자를 지정하는 방법과
② 부서일련번호(부서번호)를 주식별자로 설정하고 부서명은 보조식별자로 사용하는 방법이 있다.

 

 

 

 

3.  속성의 수가 많아지지 않도록 함.


주식별자로 선정하기 위한 속성이 복합으로 구성되어 주식별자가 될 수 있을 때 가능하면 주식별자 선정하기 위한 속성의 수가 많지 않도록 해야 한다.
그러나 만약 주식별자로 선정된 속성들이 자신이 가지고 있는 자식엔터티로부터 손자엔터티, 그리고 증손자엔터티까지 계속해서 상속이 되는 속성이고 복잡한 데이터 모델이 구현되어 물리데이터베이스에서 조인으로 인한 성능저하가 예상되는 모습을 가지고 있다면 속성의 반정규화 측면에서 하나의 테이블에 많은 속성이 있는 것이 인정될 수도 있다.
하지만 일반적으로 주식별자의 속성의 개수가 많다는 것(일반적으로 7~8개 이상)은 새로운 인조식별자(Artificial Identifier)를 생성하여 데이터 모델을 구성하는 것이 데이터 모델을 한층 더 단순하게 하고 애플리케이션을 개발할 때 조건절을 단순하게 할 수 있는 방법이 될 수 있다.

... (중략)

만약 접수 엔터티가 자식과 손자엔터티를 가지고 있고 자식과 손자엔터티에 있는 데이터를 서로 조인하여 가져오고자 한다면 아무리 간단한 SQL문장이라도 쉽게 A4용지 한 페이지는 넘어갈 것이다. 이렇게 모델상에 표현하는 문장의 간편성뿐만 아니라 애플리케이션 구성에 있어서도 복잡한 소스구성을 피하기 위하여 과도한 복합키는 배제하도록 노력해야 한다.

 

 

 


 

 

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

 

 

 

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


외부식별자(Foreign Identifier)
식별자의 분류체계 중, 스스로 생성여부에 해당되며, (반대는 내부식별자)
자기 자신의 엔터티에 필요한 속성이 아니지만, 다른 엔터티와의 관계를 통해 생성되어 있는 속성을 뜻한다.

데이터베이스 생성 시에 Foreign Key(FK) 역할을 한다.

 

관계와 속성을 정의하고 주식별자를 정의하면, 논리적인 관계에 의해 자연스럽게 외부식별자가 도출되지만 중요하게 고려해야 할 사항이 있다.

엔터티에 주식별자가 지정되고 엔터티간 관계를 연결하면 부모 -> 자식 방향으로 주식별자를 속성으로 내려 보낸다.

 

 

이떄,  ① 자식엔터티에서 부모엔터티로 받은 외부식별자를 자신의 '주식별자'로 사용할 것인지,

또는 ② 부모와 연결이 되는 속성으로서만 이용할 것인지를 결정해야 한다. (즉, 이 경우 '외부식별자'가 됨.)

 

 

[출처 : [DATA ON-AIR] 식별자 중, 식별자/비식별자관계 조정]

 

 

 

 


 

 

 

나. 식별자관계

 


① 자식엔터티에서 부모엔터티로 받은 외부식별자를 자신의 '주식별자'로 사용하는경우,

 

  • Null 값이 올 수 없다. (즉, 부모 엔터티가 반드시 생성되어야 자기 자신의 엔터티도 생성될 수 있다.)
  • 부모로부터 받은 속성을 자식엔터티가 모두 사용하고, 그것만을 주식별자로 사용한다면 부모와 자식 관계는 1:1 이다.
  • 부모로받은 속성을 포함하여 다른 부모의 속성을 포함하거나 스스로 가지고 있는 속성과 함께 주식별자를 구성하는 경우는 1:m 관계가 된다.

 

[출처 : [DATA ON-AIR] 식별자 중, 외부식별자의 주 식별자 역할]

 

위 그림을 참고하면, 발령 엔터티의 경우,
사원엔터티가 있어야 자신도 생성이 될 수 있고, 자신의 주식별자도 부모엔터티의 외부식별자인 '사원번호'와 자신의 속성 '발령일자'로 이루어져 있기에, 이떄의 관계는 1:m이다.

아래의 사원 - 임시직사원의 관계를 살펴보면,
임시직사원의 기준으로, 주식별자는 사원의 주식별자와 동일하게 사용하고 있음을 볼 수 있다.
이는 1:1 관계임을 나타내고 주식별자가 동일하며 엔터티 통합의 대상이 됨을 알 수 있다.
이와 같이 자식엔터티의 주식별자로 부모의 주식별자가 상속 되는 경우 '식별자 관계(Identifying Relationship)'라 한다.

 

 

 

 


 

 

 

다. 비식별자관계


  부모와 연결이 되는 속성으로서만 이용하는 경우,

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

 

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

 

 

 

  1. 부모에게서 받은 속성이 반드시 필요한 속성이 아니기에, 부모 없는 자식이 생성될 수 있는 경우
  2. 엔터티별로 데이터의 생명주기(Life Cycle)을 다르게 관리하는 경우, 예를 들어 부모 - 자식이 관계를 가지고 있었으나, 자식만 남겨두고 부모가 먼저 소멸되버리는 경우를 뜻한다.
  3. 여러 개의 엔터티가 하나의 엔터티로 통합되어 표현되었는데 각각의 엔터티가 별도의 관계를 가질 때
  4. 부모에게서 받은 속성을 주식별자로 사용하여도 되지만, 자식엔터티에서 별도의 주식별자를 생성하는 것이 더 유리하다 판단되는 경우

 

 

 

[출처 : [DATA ON-AIR] 식별자 중, 비식별자 관계]

 

 

 

 

 

 


 

 

 

 

이러한 식별자관계비식별자관계는, 설정할 때 관계에 대해 고려하지 않으면 문제점이 발생할 수 있다.

 

 

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


지속적으로 식별자 관계를 연결한 데이터 모델의 PK 속성의 수는, 데이터 모델의 흐름이 길어질수록 증가할 수 밖에 없는 구조를 가지게 된다.

이처럼 식별자 관계로만 설정하여 구현된 구조는 [ 의존성, 성능 저하, 데이터 중복 등]의 문제를 발생할 수 있다.




① 부모의 속성을 자식이 주식별자로 사용하는 것은 '강한 의존성 형성'으로 이어진다.
이러한 의존성은, 데이터 모델의 유연성(Flexibility)이 저하되고, 데이터 모델의 변경이나 수정이 어려워질 수 있다.

② 식별자 관계로만 설정하면 다른 비식별자 속성들이 포함된 테이블의 데이터를 참조하기 위해서, 주식별자를 계속해서 조인(Join)해야 한다.
이는 데이터베이스 성능에 부정적인 영향을 미치고, 쿼리의 길이도 매우 길어질 수 있다.

③ 식별자 관계로만 설정되면, 데이터 중복이 발생할 가능성이 높아진다.
주식별자를 가지고 있는 테이블과 다른 테이블 간에 중복된 데이터를 포함하게 될 수 있고, 이러한 경우 데이터 일관성 및 정확성에 문제가 발생할 수 있다. (데이터 무결성(Data Integrity) 침해)

 

 

 

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


① 데이터의 일관성과 정확성에 문제가 생길 수 있다. (데이터 무결성(Data Intergrity) 침해)
주식별자를 통해 테이블의 관계를 설정하는 것은 데이터의 신뢰성을 보장하기 위한 요소이다. 그러나 비식별자 관계로 설정하게 되면, 식별자의 일관성을 확인하기 어려워지며, 데이터의 무결성을 유지하기도 어려워진다.


② 데이터의 중복이 발생할 수 있다.
비식별자 관계는 주식별자 대신 다른 속성들을 사용하므로, 데이터 모델 내에서 중복돈 값을 가질 수 있다.
이는, 데이터의 효율성을 저하시키고, 데이터베이스의 용량을 불필요하게 증가시킬 수 있다.


③ 쿼리가 복잡해질 수 있다.
데이터를 조회하거나 조인할 때, 주식별자 대신 다른 속성들을 사용해야 하는데, 이는 복잡한 조인 연산을 필요로 하며, 쿼리의 작성과 실행에 어려움을 초래할 수 있다.



 

 

 

 

 


 

 

 

 

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


 

 

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

 

실제 프로젝트에서는 식별자와 비식별자관계를 올바르게 선택하여 연결하는 기술이 필요하다.

특히, 식별자관계에서 비식별자관계를 파악하는 기술이 필요하다.

하단 이미지를 참고하며 흐름(Flow)에 따라, 비식별자관계를 선정한다면 합리적으로 관계를 설정할 수 있다.

 

 

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

 

 

[출처 : [DATA ON-AIR] 식별자 중, 식별자와 비식별자 관계 모델링]

 

 

 

 

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

 

항목 식별자관계 비식별자관계
목적 강한 연결관계 표현 (유연성 ↓) 약한 연결관계 표현 (유연성 ↑)
자식 주식별자 영향 자식 주식별자의 구성에 포함됨 자식 일반 속성에 포함됨
표기법 실선 표현 점선 표현
연결 고려사항 - 반드시 부모엔터티에 종속
- 부모의 주식별자가 자식의 주식별자가 되어야 함.
- 상속받은 주식별자 속성을 다른 엔터티에 이전 필요
- 약한 종속관계
- 자식 주식별자가 독립적으로 구성
- 부모 주식별자 부분 필요
- 상속받은 주식별자속성을 타 엔터티에 차단 필요
- 부모쪽의 관계참여가 선택관계

 

 

 

 

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

[출처 : [DATA ON-AIR] 식별자 중, 식별자와 비식별자를 적용한 모델]

 

상기 모델은 업무의 특성에 따라 식별자관계와 비식별자관계를 적절하게 선택함으로써 데이터 모델의 균형감을 갖추었다고 볼 수 있다.

 

728x90