[과목1. 데이터 모델링의 이해 - 1-5. 식별자]
1. 식별자 개념
(1) 여러 개의 집합체를 담고 있는 하나의 통에서 각각을 구분할 수 있는 논리적인 이름
(2) 엔터티의 인스턴스를 개별적으로 식별하기 위해 사용되는 관계 또는 속성들의 조합 (ex. 고객-고객번호)
2. 식별자의 특징
(1) 유일성 - 유일하게 구분되어야 한다.
(2) 최소성 - 유일성을 만족하는 최소의 수가 되어야한다.
(3) 불변성- 자주 변하지 않는 것이어야 한다. 한번 등록된 식별자의 값은 변하지 않아야함
(4) 존재성- 반드시 값이 들어와야 한다. (Not NULL)
3. 식별자 분류
(1) 대표성 여부
- 주식별자 : 엔터티 내에서 각 행을 구분할 수 있는 구분자이며, 타 엔터티와 참조관계를 연결할 수 있는 식별자(ex. 사원번호, 고객번호)
- 보조식별자 : 대표성을 가지지 못해 참조관계 연결을 못함 (ex. 휴대폰번호, 주민번호)
(2) 스스로 생성 여부
- 내부식별자 : 엔터티 내부에서 스스로 만들어지는 식별자 (ex. 고객번호)
- 외부식별자 : 타 엔터티와의 관계를 통해 타 엔터티로부터 받아오는 식별자 (ex. 주문엔터티의 고객번호)
(3) 속성의 수
- 단일식별자 : 엔터티 내부에서 스스로 만들어지는 식별자
- 복합식별자 : 둘 이상의 속성으로 구성된 식별자 (ex.주문번호헤더+주문번호상세sequence)
(4) 대체여부 (인조,본질)
- 본질식별자 : 업무에 의해 만들어지는 식별자
- 인조식별자 : 업무적으로 만들어지지는 않지만 원조식별자가 복잡한 구성을 가지고 있기에 인위적으로 만든 식별자 (ex. 주문번호 -> 고객번소+주문번호+순번)
4. 식별자 도출 기준
(1) 해당 업무에서 자주 이용되는 속성을 주식별자로 지정
(2) 명칭/내역등과 이름으로 기술되는 것은 가급적 주식별자로 지정하지 않는다
(3) 복합으로 주식별자를 구성할 경우 너무 많은 속성이 포함되지 않도록 한다. (인조식별자 활용)
5. 식별자관계와 비식별자 관계의 결정 **중요!
(1) 외부식별자는 다른 엔터티와의 관계를 통해 자식 쪽에 엔터티에 생성되는 속성을 외부식별자라 하며 데이터베이스 생성시에 Foreign Key 역할을 한다.
(2) 자식엔터티에서 부모엔터티로부터 받은 외부식별자(FK)를 자신의 주식별자(#PK)로 이용할 것인지(식별자 관계),
부모와 연결이 되는 속성으로서만 이용할 것인지를 결정(비식별자 관계)
(3) 엔터티 사이 관계 유형은 업무 특징, 자식엔터티의 주 식별자 구성/SQL 전략에 의해 결정
6. 식별자 관계
(1) 외부 식별자의 주 식별자 역할 / 강한 관계
(2) 부모의 주식별자가 자식의 주식별자로 상속이 되는 경우
(3) 부모식별자가 자식식별자라면 Null이 오면 안되기에 부모가 생성되어 있어야함
7. 비식별자 관계
(1) 외부 식별자는 FK로써의 역할을 함
(2) 부모의 주식별자가 자식의 일반속성으로만 사용되는 경우
(3) 부모 없는 자식이 생성될 수 있음
(4) 자식엔터티에서 별도의 주식별자를 생성하는 것이 더 유리하다고 판단될 때 비식별자 관계에 의한 외부식별자로 표현
8. 식별자 관계로만 설정할 경우의 문제점
(1) 식별자 관계 – 주문 엔티티가 고객 엔티티의 고객번호를 식별자로 받음 ,,너무 많아짐
(2) 비식별자 관계 – 주문 엔티티가 주문번호라는 식별자를 별도로 이용,, 줄일 수 있다.
(3) 식별자 관계만으로 연결된 데이터 모델의 특징은 주식별자 속성이 지속적으로 증가할 수 밖에 없는 구조로서 개발의 복잡성과 오류가능성을 유발시킬 수 있는 요인이 될 수 있다는 사실을 기억@
9. 식별자관계와 비식별자관계
(1) 관계분석
(2) 관계의 강/약 분석 확인
(3) 자식테이블 독립 PK필요 확인
(4) SQL복잡성 증가(개발 생산성 하락)
'데이터베이스 > SQLD' 카테고리의 다른 글
[SQLD] 2-2,3. 관계와 조인의 이해, 모델이 표현하는 트랜잭션의 이해 - 키워드 요약 | 정리 | SQLD 공부 | 개발자 자격증 (0) | 2021.10.28 |
---|---|
[SQLD] 2-1. 정규화 - 키워드 요약 | 정리 | SQLD 공부 | 개발자 자격증 (0) | 2021.10.28 |
[SQLD] 1-4. 관계(Relationship) - 키워드 요약 | 정리 | SQLD 공부 | 개발자 자격증 (0) | 2021.10.27 |
[SQLD] 1-3. 속성(Attribute) - 키워드 요약 | 정리 | SQLD 공부 | 개발자 자격증 (0) | 2021.10.27 |
[SQLD] 1-2. 엔터티 - 키워드 요약 | 정리 | SQLD 공부 | 개발자 자격증 (0) | 2021.10.27 |