메뉴 건너뛰기

bysql.net

제5절 식별자

2011.09.01 02:02

실천하자 조회 수:13543

제5절 식별자


1. 식별자(Identifiers) 개념

  • 식별자는 엔터티를 구분짓는 논리적인 이름
  • 식별자는 엔터티를 대표할 수 있는 속성
  • 엔터티에는 반드시 하나의 유일한 식별자가 존재한다.



2. 식별자의 특징

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


표 1-1-7 주식별자의 특징.jpg 



3. 식별자 분류 및 표기법


가. 식별자 분류

  • 대표성 여부
    • 주식별자(Primary Identifier)
    • 보조식별자(Alternate Identifier)
  • 스스로 생성 여부
    • 내부식별자
    • 외부식별자(Foreign Identifier)
  • 속성의 수
    • 단일식별자(Single Identifier)
    • 복합식별자(Composit Identifier)
  • 대체 여부
    • 본질식별자
    • 인조식별자


표 1-1-8 식별자의 분류체계.jpg 


나. 식별자 표기법

그림 1-1-42 식별자의 분류-데이터 모델.jpg



4. 주식별자 도출기준


▶주식별자 도출 기준

  • 해당 업무에서 자주 이용되는 속성을 지정한다.
    • 예) 직원(엔터티)-사원번호, 주민번호
    • 예) 주문자(엔터티)-고객 등록번호, 주민번호, 이메일, 핸드폰번호

그림 1-1-43 식별자의 주식별자.jpg

  • 명칭, 내역 등과 같이 이름으로 기술되는 것들은 피한다.
    • 엔터티에서 구분자가 존재하지 않을 경우 새로운 식별자를 생성한다.
      • 예) 일련번호, 코드
그림 1-1-44 주식별자-명칭.내역.jpg 

  • 복합으로 주식별자로 구성할 경우 너무 많은 속성이 포함되지 않도록 한다.
    • 주식별자의 개수가 많을 경우 새로운 인조식별자(Artificial Identifier)를 생성한다.
그림 1-1-45 주식별자-복합속성.jpg

SELECT 계약금

FROM 접수 

WHERE 접수.접수일자 = ‘2010.07.15“ 

AND 접수.관할부서 = ‘1001’ 

AND 접수.입력자사번 = ‘AB45588' 

AND 접수.접수방법코드 = ‘E' 

AND 접수.신청인구분코드 = ‘01' 

AND 접수.신청인주민번호 = ‘7007171234567' 

AND 접수.신청횟수 = ‘1’


SELECT 계약금 

FROM 접수 

WHERE 접수.접수일자 = ‘100120100715001“


접수번호라는 인조식별자로 대체 하면 간단하게 할 수 있다.




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


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

외부식별자(Foreign Identifier)는 자기 자신의 엔터티에서 필요한 속성이 아니라 다른 엔터티와의 관계를 통해 자식 

쪽에 엔터티에 생성되는 속성을 외부식별자라 하며 데이터베이스 생성 시에 Foreign Key역할을 한다. 관계와 속성을 

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

이 있다. 엔터티에 주식별자가 지정되고 엔터티간 관계를 연결하면 부모쪽의 주식별자를 자식엔터티의 속성으로 내려 

보낸다. 이 때 자식엔터티에서 부모엔터티로부터 받은 외부식별자를 자신의 주식별자로 이용할 것인지 또는 부모와 연

결이 되는 속성으로서만 이용할 것인지를 결정해야 한다.



나. 식별자관계

  • 자식엔터티의 주식별자로 부모의 주식별자가 상속되는 경우를 말한다.
  • Null값이 오면 안된다.
  • 1:1관계 : 부모로부터 받은 속성을 자식엔터티가 모두 사용하고 그것만으로 주식별자로 사용할 경우
  • 1:M관계 : 부모로부터 받은 속성, 다른 부모엔터티에서 받은 속성, 스스로 가진 속성으로 주식별자가 구성된 경우


다. 비식별자관계(Non-Identifying Relationship)

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

♣ 비식별자관계 사용 예
* 자식엔터티에서 받은 속성이 반드시 필수가 아니기에 부모 없는 자식이 생성될 수 있는 경우

* 엔터티별로 데이터의 생명주기(Life Cycle)를 다르게 관리할 경우.
* 여러 개의 엔터티가 하나의 엔터티로 통합되어 표현되었는데 각각의 엔터티가 별도의 관계를 가질 때.
* 자식엔터티에서 별도의 주식별자를 생성하는 겻이 더 유리할 경우.


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

  • 식별자관계로만 연결된 모델의 경우 주식별자 속성이 지속적으로 증가한다.
  • 주식별자 증가로 복잡성과 오류가능성을 유발시킬 수 있다.


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

  • 비식별자 관계로 설정할 경우 속성이 자식엔터티로 상속되지 않는다.
  • 속성이 자식엔터티로 상속되지 않아 부모엔터티까지 조인되는 현상이 발생.
  • 불필요한 조인이 발생되고 SQL구문도 길어져 성능 저하 현상이 발생.


따라서

식별자관계와 비식별자관계 이 두 가지의 경우에 대해서

일정한 규칙을 가지고 데이터 모델링을 하는 기술이 필요하다.



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


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

다음 조건에 해당할 경우 비식별자관계로 조정하면 된다.

그림 1-1-53 비식별자관계 설정 고려사항.jpg 


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

표 1-1-10 식별자와 비식별자관계 비교.jpg


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

그림 1-1-54 식별자와 비식별자관계의 적절한 선택.jpg


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

다고 볼 수 있다.


※ 자료출처 : DBguide.Net

http://www.dbguide.net/db.db?cmd=view&boardUid=148182&boardConfigUid=9&categoryUid=216&boardIdx=132&boardStep=1


  • SQL 개발자 자격증 (bysql.net 2011년 2차 스터디)
  • 작성자: 이황배(노랑배)
  • 최초작성일: 2011년 08월 31 일
  • 본문서는 bysql.net 스터디 결과입니다 .본 문서를 인용하실때는 출처를 밝혀주세요. http://www.bysql.net
  • 문서의 잘못된 점이나 질문사항은 본 문서에 댓글로 남겨주세요. ^^