1. 식별자의 개념
: 엔터티 내에서 인스턴스들을 구분할 수 있는 구분자, 논리적 데이터모델링 단계에 사용(식별자!=key, key는 물리적모델링 단계에 사용)
2. 식별자의 특징
- 유일성 : 주 식별자에 의해 엔터티 내에 모든 인스턴스들을 유일하게 구분함
- 최소성 : 주 식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수가 되어야함
- 불변성 : 주식별자가 한번 특정 엔터티에 지정되면 그 식별자의 값은 변하지 않아야 함
- 존재성 : 주 식별자가 지정되면 반드시 데이터 값이 존재 (NULL 안됨)
3. 식별자 분류 및 표기법
가. 식별자 분류
* 대표성 여부
- 주 식별자 : 엔터티 내에서 각 어커런스를 구분할 수 있는 구분자, 타 엔터티와 참조관계를 연결할 수 있는 구분자.
- 보조 식별자 : 엔터티 내에서 각 어커런스를 구분할 수 있는 구분자, 대표성을 가지지 못해 참조 연결 못함.
* 스스로 생성 여부
- 내부 식별자 : 엔터티 내부에서 스스로 만들어지는 식별자.
- 외부 식별자 : 타 엔터니와의 관계를 통해 타 엔터티로부터 받아오는 식별자.
* 속성의 수
- 단일 식별자 : 하나의 속성으로 구성된 식별자
- 복합 식별자 : 둘 이상의 속성으로 구성된 식별자
* 대체여부
- 본질 식별자 : 업무에 의해 만들어지는 식별자
- 인조 식별자 : 업무에 의해 만들어지지는 않지만 원조 식별자가 복잡한 구성을 가지고 있기 때문에 인위적으로 만든 식별자.
나. 식별자 표기법
4. 주 식별자 도출기준
가. 해당 업무에서 자주 이용되는 속성을 주 식별자로 지정해야 함
나. 명칭, 내역 등과 같이 이름으로 기술되는 것을 피함
다. 속성의 수가 많아지지 않도록 함
5. 식별자 관계와 비식별자에 따른 식별자
가. 식별자 관계와 비식별자 관계의 결정
- 외부식별자 : 자기자신의 엔터티에서 필요한 속성이 아니라 다른 엔터티와의 관계를 통해서 자식 엔터티에 생성되는 속성(=>Foreign Key)
나. 식별자 관계
- 자식 엔터티의 주 식별자로 부모의 주식별자가 상속되는 경우
다. 비식별자 관계
- 부모 엔터티로부터 속성은 받았지만 자식 엔터티의 주식별자로 사용하지 않고 일반적인 속성으로 사용하는 경우
1) 자식 엔터티에서 받은 속성이 반드시 필수가 아니여도 무방하기 때문에 부모없는 자식이 생성될 수 있는 경우
2) 엔터티 별로 데이터의 생명주기를 다르게 관리할 경우 (자식만 남기고 먼저 소멸하는 경우)
3) 여러 개의 엔터티가 하나의 엔터티로 통합되었는데, 각각의 엔터티가 별도의 관계를 가질 때
4) 자식 엔터티에서 주식별자로 사용해도 되지만 자식 엔터티에서 별도의 주식별자를 생성하는 것이 더 유리하다고 판단될 때 비식별자에 의한 외부식별자로 표현
라. 식별자의 관계로만 할 때 문제점
- 주식별자 속성이 지속적으로 증가함에 따라 개발자 복잡성과 오류가능성을 유발할 수 있는 요인
마. 비식별자 관계로만 설정할 경우의 문제점
- 불필요한 조인이 다량 유발, SQL문도 길어져 성능이 저하되는 현상 발생
바. 식별자 관계와 비식별자 관계 모델링
1) 비식별자 관계 선택 프로세스
| 관계분석 | ||
| ▽ | ||
| 관계의 강/약 분석 | -약한관계-> | 비식별자 관계 설정 고려 |
| ▽ | ||
| 자식테이블 독립PK필요 | -독립PK구성-> | |
| ▽ | ||
| SQL 복잡도 증가, 개발 생산성 저하 |
-PK속성 단순화-> |
2) 식별자와 비식별자 관계 비교
- 식별자 관계
* 강한 연결관계 표현
* 자식 주식별자의 구성에 포함됨
* 실선표현
* 반드시 부모 엔터티 종속
* 자식 주식별자 구성에 부모 주식별자 포함
* 상속받은 주식별자 속성을 타 엔터티에 이전 필요
- 비식별자 관계
* 약한 연결관계 표현
* 자식 일반속성에 포함됨
* 약한 종속관계
* 자식 주식별자 구성을 독립적으로 구성
* 상속받은 주식별자 속성을 타 엔터티에 차단 필요
* 부모쪽의 참여관계가 선택관계
3) 식별자와 비식별자를 적용한 데이터 모델
- 식별자와 비식별자 관계가 적절한 데이터 모델은 균형감 있게 나타난다.
'자격증 > SQLD' 카테고리의 다른 글
| [#SQLD] 제 2절 정규화와 성능 (0) | 2023.02.09 |
|---|---|
| [#SQLD] 제 1절 성능데이터 모델링의 개요 (0) | 2023.02.09 |
| [#SQLD] 관계 (0) | 2023.02.08 |
| [#SQLD] 속성 (0) | 2023.02.07 |
| [#SQLD] 엔터티 (0) | 2023.02.07 |
댓글