SQL - 식별자
식별자
엔티티는 인스턴스의 집합이기 때문에 각 인스턴스를 구분할 수 있는 식별자가 필요하다.
식별자의 특징
- 유일성 : 주식별자에 의해 엔티티 내의 모든 인스턴스들을 유일하게 구분함
- 최소성 : 주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수가 되어야함.
- 불변성 : 주식별자가 한 번 특정 엩티티에 지정되면 그 식별자의 값은 변하지 않아야함
- 존재성 : 반드시 Null 이 아니어야 한다.
식별자 분류
- 대표성 유무 : 주식별자/부식별자
- 스스로 생성 여부 : 내부식별자/외부식별자
- 단일속성 유무 : 단일식별자/복합식별자
- 대체여부 : 본질식별자/인조식별자
주식별자 도출 기준
- 업무에서 자주 이용되는 속성을 주식별자로 지정되도록 함 : 후보키 중 가장 많이 이용되는 것을 주 식별자로 하는게 좋다.
- 명칭, 내역 등과 같이 이름으로 기술되는 것은 피함
- 속성의 수가 많아지지 않도록 함 : 최소성, 어쩔수 없는 경우 인조 식별자를 만든다.
식별자관계와 비식별자관계에 따른 식별자
- 식별자관계와 비식별자 관계의 결정 : 자식엔티티의 외부식별자를 주 식별자로 넣을 것인지 잘 결정해야한다.
- 식별자관계 : 자식엔티티가 부모엔티티에게서 외부식별자를 얻는경우 Null 이면 안되기 때문에 반드시 부모 가 먼저 생성되어야 한다. 스스로 가지고 있는 속성과 함께 주식별자가 된다면 1:M 관계가 될 수 있다.
- 비식별자관계 : 부모 없는 자식 엔티티가 생성될 수 있는 경우. 부모 엔티티가 자식 엔티티를 남겨두고 먼저 소멸할 수 있는 경우.
식별자관계로만 설정할 경우의 문제점
- 자식엔티티의 자식엔티티가 있을 경우 주식별자가 지나치게 많아질 수 있다.
비식별자관계로만 설정할 경우의 문제점
- 부모 엔티티의 자식 엔티티간의 Join 시 불필요하게 부모 엔티티를 조회해야할 경우가 생긴다.
식별자관계와 비식별자관계 모델링
- 강한 연결 관계 / 약한 연결 관계 : 상속 필요 여부, 독립성 필요 여부 등을 고려
참조
책 : SQL 전문가 가이드 2013 Edition , KODB(한국데이터베이스진흥원)