[정리노트] SQLD 2024년 개정판 - 식별자
식별자
개념
- 각 인스턴스를 구분할 수 있는 논리적인 이름
- 엔터티 내의 각 인스턴스를 개별적으로 식별하기 위해 사용된다
- ex) 고객(고객번호), 사원(사원번호), 주문(주문번호), 상품(상품번호)
특징
- 모든 인스턴스들이 유일하게 구분
- 속성의 수는 유일성을 만족하는 최소의 수
- 자주 변하지 않는 것이어야 한다
- 반드시 값이 들어와야 한다
분류
- 본질 식별자 = 원조 식별자 (Original)
- 인조 식별자 = 대리 식별자 (Surrogate)
식별자 도출 기준
- 해당 업무에서 자주 이용되는 속성을 주식별자로 지정한다
- 명칭, 내역 등과 같이 이름으로 기술되는 것들은 가능하면 주식별자로 지정하지 않는다.
- 복합으로 주식별자를 구성할 경우 너무 많은 속성이 포함되지 않도록 한다
식별자 관계와 비식별자 관계의 설정
- 외부식별자(Foreign Identifier)는 자기 자신의 엔터티에서 필요한 속성이 아니라 다른 엔터티와의 관계를 통해 자식 쪽 엔터티에 생성되는 속성을 외부식별자라 하며 데이터베이스 생성 시에 Foreign Key 역할을 한다.
- 자식엔터티에서 부모엔터티로부터 받은 외부식별자를 자신의 주식별자로 이용할 것인지(식별자 관계) 또는 부모와 연결이 되는 속성으로만 이용할 것인지를 결정 (비식별자 관계) 해야 한다.
식별자 관계
- 자식엔터티의 주식별자로 부모의 주식별자가 상속이 되는 경우를 식별자 관계 (Identifying Relationship)라고 한다.
- 부모로부터 박은 식별자를 자식엔터티의 주식별자로 이용하는 경우는 Null값이 오면 안되므로 반드시 부모엔터티가 생성되어야 자기 자신의 엔터티가 생성되는 경우이다.
비식별자 관계
- 부모엔터티로부터 속성을 받았지만 자식엔터티의 주식별자로 사용하지 않고 일반적인 속성으로만 사용할 경우 비식별자 관계(Non-Identifying Relationship)라고 한다
- 자식엔터티에서 받은 속성이 반드시 필수가 아니어도 무방하기 때문에 부모 없는 자식이 생성될 수 있는 경우
- 자식엔터티에서 주식별자로 사용하여도 되지만 자식엔터티에서 별도의 주식별자를 생성하는 것이 더 유리하다고 판단될 때 비식별자 관계에 의한 외부식별자로 표현한다
식별자 관계로만 설정할 경우의 문제점
- 식별자 관계 - 주문 엔터티가 고객 엔터티의 고객번호를 식별자로 받음
- 비식별자 관계 - 주문엔터티가 주문번호라는 식별자를 별도로 이용
- 지속적으로 식별자 관계를 연결한 데이터 모델의 PK속성의 수는 데이터 모델의 흐름이 길어질수록 증가할 수 밖에 없는 구조를 가지게 됨
- 개발자가 개발할 때 당연히 데이터 모델을 참조하면서 엔터티와 관계를 이용하여 개발해야 하는데 생성된 엔터티 스키마 정보만을 보고 개발하는 경우가 많다.
- 조인에 참여하는 주식별자속성의 수가 많을 경우 정확하게 조인관계를 설정하지 않고 누락하여 개발하는 경우가 간혹 발견되기도 함
- 식별자 관계만으로 연결된 데이터 모델의 특징은 주식별자 속성이 지속적으로 증가할 수 밖에 없는 구조로서 개발의 복잡성과 오류가능성을 유발시킬 수 있는 요인이 될 수 있다.
식별자관계와 비식별자 관계
- 식별자관계에서 비식별자관계를 파악하는 기술이 필요한데 다음 흐름(Flow)에 따라 비식별자관계를 선정한다면 합리적으로 관계를 설하는 모습이 될 수 있다. 기본적으로 식별자관계로 모든 관계가 연결되면서 다음 조건에 해당할 경우 비식별자 관계로 조정하면 된다.
식별자 종류
- 기본키: 주식별자, 여러 개의 후보키 중에서 하나를 선정, 테이블을 대표하는 키 (대표성)
- 후보키: 키의 특성인 유일성과 최소성을 만족하는 키
- 슈퍼키: 유일성은 만족하나 최소성을 만족하지 않는 키
- 대체키: 후보키 중 기본키로 선정되지 않는 키, 기본키를 대체할 수 있는 키
- 외래키: 한 릴레이션의 속성(집합)이 다른 릴레이션의 기본키로 이용되는 키
반응형
'스터디 > SQL' 카테고리의 다른 글
[정리노트] SQLD 2024년 개정판 - 관계와 조인의 이해 (57) | 2024.08.13 |
---|---|
[정리노트] SQLD 2024년 개정판 - 정규화 (67) | 2024.08.07 |
[정리노트] SQLD 2024년 개정판 - 속성 (80) | 2024.07.29 |
[정리노트] SQLD 2024년 개정판 - Entirty (엔터티) (63) | 2024.07.24 |
[정리노트] SQLD 2024년 개정판 - 데이터 모델링의 이해 (3) | 2024.07.12 |