728x90
반응형

제 5절 식별자


1. 식별자(Identifiers) 개념


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


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



2. 식별자의 특징


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

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

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

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



특징 

내용 

비고 

유일성 

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

예) 사원번호가 주식별자가 모든 직원들에 대해 개인별로 고유하게 부여됨


최소성 

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

예) 사원번호만으로도 고유한 구조인데 사원분류코드 + 사원번호로 식별자가 구성될 경우 부적절한 주식별자 구조임 



불변성 

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

예) 사 원번호의 값이 변한다는 의미는 이전기록이 말소되고 새로운 기록이 발생되는 개념임 


존재성 

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


예) 사원번호 없는 회사직원은 있을 수 없음  



3. 식별자 분류 및 표기법


가. 식별자 분류


 분류

식별자 

설명 

대표성여부 

주식별자 

엔티티 내에서 각 어커런스를 구분할 수 있는 구분자이며, 타 엔티티와 참조관계를 연결할 수 있는 식별자 

보조식별자 

엔티티 내에서 각 어커런스를 구분할 수 있는 구분자이나 대표성을 가지지 못해 참조관계 연결을 못함 

스스로 생성여부 

내부식별자 

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

외부식별자 

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

속성의 수 

단일식별자 

하나의 속성으로 구성된 식별자 

복합식별자 

둘 이상의 속성으로 구성된 식별자 

대체여부 

본질식별자 

업무에 의해 만들어지는 식별자 

인조식별자 

업무적으로 만들어지지는 않지만 원조식별자가 복잡한 구성을 가지고 있기 때문에 인위적으로 만든 식별자 




나. 식별자 표기법





4. 주식별자 도출기준


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

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

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






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


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


외부식별자(Foreign Identifier) : 

자기 자신의 엔티티에서 필요한 속성이 아니라 다른 엔티티와의 관계를 통해 자식 쪽에 엔티티에 생성되는 속성을 외부식별자라 하며 데이터베이스 생성시에 Foreign Key 역할을 한다. 또한 엔티티에 주식별자에 지정되고 엔티티간 관계를 연결하면 부모쪽의 주식별자를 자식엔티티의 속성으로 내려 보낸다.


나. 식별자 관계


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


이와 같이 자식엔티티의 주식별자로 부모의 주식별자가 상속이 되는 경우를 식별자관계(Identifying Relationship)라고 지칭한다.



다. 비식별자 관계


부모엔티티로부터 속성을 받았지만 자식엔티티의 주식별자로 사용하지 않고 일반적인 속성으로만 사용하는 경를 비식별자 관계(Non-Identifying Relationship)라고 한다. 다음 네가지 경우에 비식별자 관계에 의한 외부속성을 생성한다.


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

2) 엔티티별로 데이터의 생명주기를 다르게 관리할 경우

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

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




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


부모에서 자식으로 식별자 관계로 연결되므로 인해 주식별자의 속성 수가 많아짐 





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


일반적으로 각각의 엔티티에는 중요한 기준 속성이 있는데 이러한 기준속성은 부모엔티티에 있는 PK 속성으로부터 상속되어 자식엔티티에 존재하는 경우가 많다. 이러한 속성의 예로 주민등록번호, 사원번호 등이 있는데 이러한 속성은 부모엔티티를 조회할 때도 쓰이지만

자식 엔티티의 데이터를 조회할 떄도 해당 조건이 조회의 조건으로 걸리는 경우가 다수 있다.


그런데 데이터 모델링을 전개할 때 각 엔티티간의 관계를 비식별자 관계로 설정하면 이런 유형의 속성이 자식엔티티로 상속이 되지 않아

자식엔티티에서 데이터를 처리할 때 쓸떼 없이 부모엔티티까지 찾아가야 하는 경우가 발생된다.


이렇게 비식별자 관계로만 데이터모델링을 전개할 경우, SQL 구분에 많은 조인이 걸리게 되고 그에 따라 복잡성이 증가하고 성능이 저하되게 되는 것이다. 


식별자 관계를 통하여 연결을 하게 되면 부모의 모든 주식별자 속성을 상속받음으로 인해 맨 하위에 있는 자식엔티티에서 바로 조회의 조건을 이용하여 원하는 정보를 가져올 수 있게 된다.






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


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


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

독립적으로 주식별자를 구성한다는 의미는 업무적 필요성과 성능상 필요여부를 모두 포함하는 의미로 이해하면 된다.





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








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


SCH_점검, SCH_점검상세, SCH_메일발송이력이 비식별자

SCH_프로젝트 단계, SCH_프로젝트연락이력이 식별자 관계를 적용한 모델이다.





728x90
반응형

'Computer Science > SQL-D' 카테고리의 다른 글

[SQLD] 7. 정규화와 성능  (0) 2016.08.04
[SQLD] 6. 성능 데이터 모델링의 개요  (0) 2016.08.04
[SQLD] 4. 관계(Relationship)  (0) 2016.08.01
[SQLD] 3. 속성(Attribute)  (0) 2016.08.01
[SQLD] 2. 엔티티(Entity)  (0) 2016.08.01