가. 식별자란?
- 여러 개의 데이터 컬럼을 구분할수 있는 기준
- 하나의 엔티티에 구성되어 있는 여러 개의 속성중, 엔티티를 대표 할 수 있는 속성을 의미하며 하나의 엔티티는 반드시 하나의 유일한 식별자가 존재해야한다.
키와 식별자 : 식별자는 업무적으로 구분이 되는 정보로 생각할 수 있으므로 논리 데이터 모델링 단계에서 사용하고 키는 데이터베이스 테이블에 접근하기 위한 매개체로 물리 데이터 모델에 사용된다.
나. 식별자의 특징
- 주식별자에 의해 엔티티 내에 모든 인스턴스들이 유일하게 구분되어야함
- 주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수가 되어야한다.
- 지정된 주식별자의 값은 자주 변하지 않는 것이 좋다.
- 주식별자가 지정이 되면 반드시 값이 들어와야 한다.
유일성 : 주식별자에 의해 엔티티 내의 인스턴스들이 유일하게 구분되어야 함. 예: 사원번호
최소성 : 주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수가 되야 함. 예: 사원번호만으로도 충분한 식별에 되는 대도 불구하고 사원분류코드로 또 분류함.
불변성 : 주식별자가 한번 특정 엔티티에 지정되면 그 식별자의 값은 변하지 않아야 함 예: 사원번호가 변한다는 말은 사원이 없어지고 새로 생긴다는 의미
존재성 : 주식별자가 지정되면 반드시 데이터 값이 존재 해야함 (Null 값이 안됨) : 예: 사원번호 없는 직원은 없음.
다. 식별자 분류 및 표기법
대표성여부
- 주식별자 : 엔티티 내에서 각 어커런스를 구분할수 있는 구분자이며 타 엔티티와 참조관계를 연결할 수 있는 식별자
- 보조식별자 : 엔티티 내에서 각 어커런스를 구분할 수 있는 구분자이나 대표성을 가지지 못해 참조관계를 연결을 못함
스스로 생성여부
- 내부 식별자 : 엔티티 내부에서 스스로 만들어지는 식별자
- 외부 식별자 : 타 엔티티와의 관계를 통해 타엔티티로부터 받아오는 식별자
속성의 수
- 단일 식별자 : 하나의 속성으로 구성된 식별자
- 복합 식별자 : 둘 이상의 속성으로 구성된 식별자
대체여부
- 본질식별자 : 업무에 의해 만들어지는 식별자
- 인조식별자 : 업무적으로 만들어지는 않지만 원조 식별자가 복잡한 구성을 가지고 있기 떄문에 인위적으로 만든 식별자
라. 주식별자 선정기준
- 해당 업무에서 자주 이용되는 속성
- 내역, 이름등 기술되는 것은 가능하면 주식별자로 지정하지 않는다.
- 복합으로 주식별자로 구성할 경우 너무 많은 속성이 포함되지 않도록 한다.
마. 식별자관계와 비식별자관계에 따른 식별자
식별자 관계와 비식별자 관계의 설정
외부식별자는 자기 자신의 엔터티에서 필요한 속성이 아니라 다른 엔터티와의 관계를 통해 자식 엔티티에 생성되는 속성을 외부 식별자라 한다. db 생성시에 foreign key역할을 한다. 관계와 속성을 정의하고 주식별자를 정의하면 자연스럽게 외부식발자가 도출되지만 주요하게 고려해야 할 사항이 있다. 엔터티에 주식별자가 지정되고 엔터티간 관계를 연결하면 부모쪽의 주식별자를 자식엔터티의 속성으로 내려보낸다. 이떄 자식엔터티에서 부모 엔터티로 부터 받은 외부 식별자를 자신의 주식별자로 사용할 것인지 또는 부모와 연결이 되는 속성으로만 이용할 것인지 결정해 야 한다.
식별자 관계
- 식별자 관계란? 자식엔터티의 주식별자로 부모의 주식별자가 상속되는 경우를 말한다.
- null 되면 안됨,
- 1:1 관계 : 부모로부터 받은 속성으로 부터 자식엔터티가 모두 사용되고 그것만으로 주식별자로 사용할 경우
- 1:m 관계 : 스스로 가진 속성으로 부터 주식별자를 가지고 다른 컬럼으로 다른 외부식별자를 가진 상태
비식별자 관계
- 부모 엔티티로 부터 속성을 물려 받았지만 다른 자식별자로 사용하지 않고 인반적인 속성으로 사용하는 상태
사용 예: 자식엔티티에서 받은 속성이 꼭 필수가 아닐때, 엔터티별로 데이터의 생명주기가 다르게 관리 할경우, 여러 개의 엔터티가 하나의 엔터티로 통합되어 표현되었는데 각각의 엔터티가 별도의 관계를 가질때(?), 자식엔터티에서 별도의 주식별자를 생성하는것이 더유리 할 경우.
바. 문제점
식별자 관계로만 설정할 경우
- 식별자 관계로만 연결된 모델의 경우 주석별자 속성이 지속적으로 증가한다. 주식별자 증가로 복잡성과 오류가능성을 유발
비식별자 관계로만 설정된 경우
- 비식별자 관계로 설정할 경우 속성이 자식엔터티로 상속되지 않는다. 속성이 자식 엔터티로 상속되지 않아 부모엔터티까지 조인되는 현상이 발생함. 불필요한 조인이 발생되고 sql 구문도 길어져 성능 저하 현상이 발생.
바. 모델링
1) 비식별자관계 선택프로세스
2) 식별자와 비셕별자 관계 비교
3) 식별자와 비식별자를 적용한 데이터 모델