본문 바로가기

자격증/SQLD

SQLD 1과목 1-5장. 식별자

[ 목차 ]

1. 식별자란?

2. 식별자의 특징

3. 식별자의 분류

4. 식별자의 표기법

5. 주식별자 도출기준

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

7. 식별자 관계

8. 비식별자 관계

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

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

11. 비식별자 관계를 선택하는 방법

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

 

1. 식별자란?

1) 하나의 엔터티에 구성되어 있는 여러 개의 속성 중에 엔터티를 대표할 수 있는 속성을 의미

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

 

2. 식별자의 특징

1) 주식별자의 특징

  1] 유일성 : 주식별자에 의해 엔터티내에 모든 인스턴스들이 유일하게 구분되어야 함

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

  3] 불변성 : 주식별자가 한 번 특정 엔터티에 지정되면 그 식별자의 값은 변하지 않아야

  4] 존재성 : 주식별자가 지정되면 반드시 데이터 값이 존재

2) 대체식별자의 특징은 주식별자와 같음

3) 외부식별자의 특징은 주식별자와 일치하지 않으며 참조무결성 제약조건에 따른 특징을 보유

 

3. 식별자의 분류

1) 엔터티 내에서 대표성을 가지는지에 따라 주식별자, 보조식별자로 구분

2) 엔터티 내에서 스스로 생성되었는지의 여부에 따라 내부식별자, 외부식별자로 구분

3) 단일 속성으로 식별되는지에 따라 단일식별자, 복합식별자로 구분

4) 원래 업무적 의미가 있던 식별자와 대체하여 새로 만들어진 식별자 구분을 위해 본질식별자, 인조식별자로 구분

 

4. 식별자의 표기법

 

5. 주식별자 도출기준

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

  1] 직원 엔터티의 속성 주민등록번호와 사원번호 중 회사에서 사용되는 사원번호를 주식별자로 지정

2) 이름으로 기술되는 것들(명칭, 내역 등)은 가능하면 주식별자로 지정 X

  1] 만약 부서이름을 주식별자로 선정하면 물리적데이터베이스로 테이블을 생성하여 데이터를 읽을 때 항상 부서이름

     이 WHERE 조건절에 기술되는 현상이 발생

  2] 새로운 식별자(코드, 일련번호)를 생성하여 코드엔터티에 등록한 후 이를 주식별자를 지정하고 명칭은 보조식별자로

3) 복합으로 주식별자를 구성할 경우 많은 속성이 포함되지 않도록

  1] 주식별자의 속성 개수가 많다면 새로운 인조식별자를 생성하여 데이터 모델을 구성하는 것이 데이터 모델을 한층

     더 단순하게 하고 애플리케이션을 개발할 때 조건절을 단순하게 할 수 있는 방법

 2] 문장의 간편성과 애플리케이션 구성에 있어 복잡한 소스구성을 피하기 위해 과도한 복합키는 배제

 

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

1) 다른 엔터티와의 관계를 통해 자식엔터티에 생성되는 속성외부식별자라 지칭

2) 자식엔터티는 부모엔터티로부터 받은 외부식별자를 자신의 주식별자로 사용할지 혹은 부모와 연결이 되는 속성으로

   사용할지 결정해야 함

 

7. 식별자 관계

1) 자식엔터티의 주식별자로 부모의 주식별자가 상속이 되는 경우

2) 부모로부터 받은 식별자를 자식엔터티의 주식별자로 쓸 경우 Null값이 오면 안되므로 반드시 부모엔터티가 생성되어

   야 자기 자신의 엔터티가 생성

3) 주식별자로 사용할 경우 부모와 자식은 1:1 관계

4) 부모로부터 받은 속성과 다른 속성들을 함께 주식별자로 사용할 경우 부모와 자식은 1:M 관계

 

8. 비식별자 관계

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

2) 비식별자 관계에 의한 외부속성을 생성하는 경우 네 가지

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

  2] 엔터티별로 데이터의 생명주기를 다르게 관리할 경우, 즉 자식엔터티와 관계를 가진 부모엔터티가 먼저 소멸

     데이터 모델상에서 관계를 비식별자관계로 조정하는 것이 좋은 해결 방법

  3] 여러 개의 엔터티가 하나의 엔터티로 통합되어 표현되었으나 각각의 엔터티가 별도의 관계를 가지는 경우

  4] 자식엔터티에 주식별자로 사용하여도 되지만 별도의 주식별자를 생성하는 것이 더 유리하다고 판단되는 경우

 

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

1) 지속적으로 식별자 관계를 연결한 데이터 모델의 PK속성의 수는 데이터 모델의 흐름이 길어질수록 증가하는 구조

2) 조인에 참여하는 주식별자속성 수가 많을 경우 정확하게 조인관계를 설정하지 않고, 즉 누락하여 개발하는 경우 발생

3) 식별자 관계만으로 연결된 데이터 모델은 주식별자 속성이 지속적으로 증가하여 개발자 복잡성과 오류가능성 유발

 

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

1) 엔터티의 주요한 기준 속성은 부모엔터티의 PK속성으로부터 상속되어 자식엔터티에 존재하는 경우가 많음

2) 엔터티 간의 관계를 비식별자 관계로 설정하면 해당 유형의 속성이 자식엔터티로 상속되지 않아 자식엔터티에서

   이터를 처리할 때 부모엔터티까지 찾아가야 하는 경우 발생

3) 불필요한 조인이 다량으로 유발되어 SQL구문이 길어지고 성능이 저하

 

11. 비식별자 관계를 선택하는 방법

1) 관계분석

2) 관계의 강/약을 분석 -> 약의 경우 비식별자 관계 설정 고려

3) 자식테이블 독립 PK의 필요 -> 독립 PK 구성하여 비식별자 관계 설정 고려

4) SQL복잡도 증가, 개발생산성 저하 -> PK속성 단순화하여 비식별자 관계 설정 고려

1) 가장 중요한 요인은 자식엔터티의 독립된 주식별자 구성의 필요 유무를 분석하는 부분으로, 독립적으로 주식별자를

   구성한다는 의미는 업무적 필요성과 성능상 필요어부를 모두 포함하는 의미

 

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

'자격증 > SQLD' 카테고리의 다른 글

SQLD 1과목 2-2장. 정규화와 성능  (0) 2020.02.28
SQLD 1과목 2-1장. 성능데이터 모델링의 개요  (0) 2020.02.28
SQLD 1과목 1-4장. 관계  (0) 2020.02.27
SQLD 1과목 1-3장. 속성  (0) 2020.02.26
SQLD 1과목 1-2장. 엔터티  (0) 2020.02.20