Notice
Recent Posts
Recent Comments
12-05 09:36
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

-

[SQLD] #005 데이터 모델링의 이해 - 식별자 본문

SQLD

[SQLD] #005 데이터 모델링의 이해 - 식별자

choiht 2021. 4. 19. 17:58
반응형

목차

1. 식별자 개념

2. 식별자의 특징

3.식별자 분류 및 표기법

4. 주식별자 도출기준

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

 

 


 

 

1. 식별자(Identifiers) 개념

식별자 : 여러개의 엔터티 내에서 인스턴스들을 구분할 수 있는 구분자

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

 

 

 

 

 

 

 

 

2. 식별자의 특징

주식별자의 경우 

- 주식별자에 의해 엔터티 내에 모든 인스턴스들이 유일하게 구분되어야 한다.

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

- 지정된 주식별자의 값은 자주 변하지 않는 것이어야 한다. 

- 주식별자가 지정이 되면 반드시 값이 들어와야한다. 

 

 

 

 

 

 

 

 

 

3. 식별자 분류 및 표기법

1. 식별자 분류

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

- 엔터티 내에서 스스로 생성되었는가 : 내부식별자와 외부식별자로 구분

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

 

 

 

좀 더 자세히 설명하면 아래 표와 같다.

 

 

 

 

 

 

 

 

2. 식별자 표기법

 

 

 

 

 

 

 

 

4. 주식별자 도출기준

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

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

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

 

 

 

 

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

직원이라는 엔터티가 있을 때 유일하게 식별가능한 속성으로는 주민번호와 사원번호가 있다. 

따라서 사원번호를 주식별자로 지정하고 주민번호는 보조식별자로 사용할 수 있다. 

 

 

 

 

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

예를 들어 회사 내에 부서들은 부서 이름으로 구별될 수 있지만, 부서 이름을 주식별자로 지정하면 안된다. 

만약 부서 이름을 주식별자로 선정하면 데이터베이스로 테이블을 생성하여 데이터를 읽을 때 항상 부서 이름이 WHERE 조건절에 기술되는 현상이 일어난다. 부서 이름은 길면 20자 이상이 될 수 있으므로 조건절에 정확한 부서명을 항상 기술하는게 쉬운 것이 아니다. 

 

 

 

 

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

주식별자의 속성의 개수가 많으면 새로운 인조식별자를 생성하여 데이터 모델을 구성하는 것이 데이터 모델을 더 단순하게 하고, 애플리케이션을 개발할 때 조건절을 줄이는 방법이 된다.

 

 

 

 

 

 

 

 

 

 

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

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

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

 

엔터티에 주식별자가 지정되고 엔터티간 관계를 연결하면 부모쪽의 주식별자를 자식엔터티의 속성으로 내려보낸다. 이 때 자식 엔터티에서 부모엔터티로부터 받은 외부식별자를 자신의 주식별자로 이용할 것인지 또는 부모와 연결이 되는 속성으로써만 이용할 것인지 결정해야한다.

 

 

 

 

 

 

 

2. 식별자 관계

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

부모로부터 받은 속성을 자식엔터티가 모두 사용하고 그것만으로 주식별자로 사용한다면 부모엔터티와 자식엔터티의 관계는 1:1이 될 것이다. 또한 만약 부모로부터 받은 속성을 포함하여 다른 부모엔터티에서 받은 속성을 포함하거나 스스로 가지고 있는 속성과 함께 주식별자로 구성되는 경우는 1:M 관계가 된다. 

 

외부식별자의 주식별자 역할

 

 

 

 

 

 

3. 비식별자 관계

비식별자 관계 (Non-Identifying Relationship) : 부모엔터티로부터 속성을 받았지만 자식엔터티의 주식별자로 사용하지 않고 일반적인 속성으로만 사용하는 경우

 

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

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

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

3. 여러 개의 엔터티가 하나의 엔터티로 통합되어 표현되었는데 각각의 엔터티가 별도의 관계를 가질 때

4. 자식엔터티의 주식별자로 사용해도 되지만 자식엔터티에서 별도의 주식별자를 생성하는 것이 더 유리하다고 판단될 때 

 

 

 

 

 

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

원시 엔터티인 PLANT의 경우 단지 한개의 속성만 PK 속성이지만, EQPEVTSTSHST 엔터티의 경우 부모로부터 모두 식별자관계 연결로 인해 PK의 개수가 5개나 설정될 수 밖에 없다. 

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

 

 

 

 

 

 

 

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

일반적으로 각각의 엔터티에는 중요한 기준 속성이 있는데, 이들은 부모 엔터티에 있는 PK 속성으로부터 상속되어 자식엔터티에 존재하는 경우가 많다. 그런데 데이터 모델링을 전개할 때 각 엔터티 간의 관계를 비식별자 관계로 설정하면 이런 유형의 속성이 자식엔터티로 상속되지 않아 자식엔터티에서 데이터를 처리할 때 쓸데없이 부모엔터티까지 찾아가야한다. 

 

 

 

 

 

 

 

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

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

프로젝트를 진행할 때 식별자 관계에서 비식별자 관계를 파악하는 기술이 필요하다. 

그때 다음 흐름에 따라 비식별자 관계를 선정한다면 합리적으로 관계를 설정할 수 있다. 

 

여기서 가장 중요한 것은 자식엔터티의 독립된 주식별자 구성이 필요한지를 분석하는 부분이다. 

 

 

 

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

 

 

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

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

 

 

 

 

 


출처
이 글의 내용은 모두 한국데이터베이스진흥원이 출판한 SQL 전문가 가이드 2013 Edition을 기본으로 한다.

 

 

반응형
Comments