SQLD 자격증 공부하면서 정리한 내용들을 작성한 글입니다.
5. 식별자(Identifier)
(1) 식별자란?
- 엔터티를 구분하는 논리적인 이름
- 엔터티를 대표할 수 있는 속성
- 엔터티에는 반드시 하나의 유일한 식별자가 존재
(2) 식별자 특징
- 유일성
- 주 식별자에 의해 엔터티 내 모든 인스턴스를 유일하게 구분
- 최소성
- 주 식별자를 구성하는 속성 수는 유일성을 만족하는 최소의 수여야 함
- 불변성
- 주 식별자가 한 번 특정 엔터티에 지정되면, 그 식별자 값은 변하지 않음
- 존재성
- 주 식별자가 지정되면 반드시 데이터 값이 존재해야 한다.(NOT NULL)
(3) 식별자(키) 분류
- 대표성 여부
- 스스로 생성되는지
- 내부 식별자 / 외부 식별자(다른 개체와의 연결자 역할)
- 하나의 속성으로 식별 되는지
- 본질 식별자 : 원래 있던 식별자
- 인조 식별자 : 대체하여 새로 만든 식별자
(4) 주 식별자 후보 기준
- 유일성 : 가장 기본(NULL은 안됨)
- 개념적으로 유일해야 함(중복 가능성 배제)
- 나머지 속성들을 직접 식별할 수 있어야 함
→ 다른 속성들 입장에서도 이 식별자가 유일해야 한다.
- 자주 변경되지 않는게 좋다.(보통 주 식별자가 인덱스로 구현되기 때문에)
(5) 식별자 관계와 비식별자 관계
- 식별자 관계
- 외래 식별자가 주 식별자(이거나 포함)
→ 자식이 부모의 기본키를 상속받아 기본키로 사용할 경우
- NULL이면 안됨 (반드시 부모 엔터티가 생성되어야 자신 엔터티 생성)
- 문제점 : 자식의 주 식별자 속성이 지속적으로 증가할 수 있어 복잡해지고, 오류 발생 가능성이 높아진다.
- 비식별자 관계
- 비식별 관계 - 외래 식별자가 일반 속성
→ 부모에게 속성을 받았을 때, 자식의 기본키로 사용하지 않고 일반적인 속성으로만 사용하는 경우
- 문제점 : 부모까지 조인해야되는 상황이 발생하여 sql 구문이 길어지고 성능이 저하된다.