
엔터티를 구성하는 여러 인스턴스를 구분할 수 있는 논리적 이름을 식별자라고 합니다. 식별자는 엔터티의 속성 중 엔터티를 대표하는 속성으로 하나의 인스턴스는 반드시 하나의 식별자가 있어야합니다. 식별자라는 용어는 논리 데이터 모델링 단계에서 사용하고 물리적 모델링 단계에서는 '키' 로 대체해서 사용합니다.
주식별자와 외부식별자의 구분
식별자는 특징에 따라 주식별자와 외부 식별자로 구분됩니다. 주식별자는 다음과 같은 특징을 모두 만족해야 합니다.
- 유일성 : 식별자에의해 엔터티 내의 모든 인스턴스가 유일하게 구분되어야한다.
- 최소성 : 주식별자를 구성하는 속성의 수는 최소여야 한다.
- 불변성 : 주식별자로 사용되는 속성은 자주 변하지 않는 것이어야 한다.
- 존재성 : 주식별자로 사용되는 속성은 반드시 값이 존재해야 한다.
외부식별자는 이런 특징을 만족하지 않아도 되지만 참조무결성 제약조건을 만족해야 합니다.
참조무결성 제약조건
무결성 제약조건이란 데이터베이스의 정확성과 일관성을 보장하기 위해 저장, 삭제, 변경을 위한 제약조건을 말합니다. 참조무결성 제약조건은 엔터티끼리 관계를 맺을때 무결성을 유지하기위한 제약조건을 말합니다.
참조무결성 제약조건에 따르면 외래키 값은 NULL 이거나 관계하는 엔터티의 기본키와 동일해야합니다.
주식별자 도출기준
- 해당 업무에서 자주 이용되는 속성을 주식별자로 지정한다.
- 복합으로 주식별자를 구성하는 경우 너무 많은 속성이 포함되지 않도록 한다.
특징에 따른 식별자의 분류
| 구분 | 유 | 무 |
| 엔터티내에서 대표성을 가지는가? |
주식별자 | 보조식별자 |
| 엔터티 내에서 스스로 생성됐는가? |
내부식별자 | 외부식별자 |
| 단일 속성으로 식별이 되는가? | 단일식별자 | 복합식별자 |
| 업무적으로 의미가 있던 식별자 속성을 대체하는가? | 인조식별자 | 본질식별자 |
주식별자로 쓰일수 있는 속성의 특징
업무에서 자주 이용하는 속성을 주식별자로 지정해야합니다. 명칭이나 내역과 같이 긴 문자열을 값으로 같는 속성은 주식별자로 지정하지 않아야합니다. 일련번호나 코드로 별도의 테이블을 만들어 관리하는 것이 좋습니다. 다수의 속성으로 복합식별자를 구성해야하는 경우 속성의 수를 최소화해야합니다. 식별자에 포함되는 속성이 많으면 하위 엔터티로 상속하는 과정에서 과도한 수의 속성이 식별자에 포함되어 성능저하를 야기할 수 있습니다.
- 주식별자에 의해 엔터티 내의 모든 인스턴스들이 유일하게 구분되어야한다.
- 주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수가 되어야 한다.
- 지정된 주식별자의 값은 자주 변하지 않는 값이어야 한다.
- 주식별자로 지정되면 반드시 값이 있어야 한다.
식별자관계와 비식별자관계
외부식별자(외래키)는 관계 엔터티에서 생성되는 속성을 말합니다. 외부식별자를 지정할때 반드시 고려해야할 점이 있습니다. 관계엔터티로 부터 전달받은 외부식별자를 자신의 주식별자 에 포함할 것인지 단지 관계를 위한 연결 속성으로만 사용할지 결정해야합니다. 주식별자에 포함한다면 두 엔터티는 식별자 관계가 되고 포함하지 않는다면 비식별자 관계가 됩니다.
식별자관계
관계 엔터티로 부터 전달받은 식별자를 자신의 주식별자로 이용하는 경우 주식별자는 Null값을 가질 수 없으므로 반드시 관계 엔터티가 생성되어야 자신의 엔터티를 생성할 수 있습니다. 전달받은 속성만을 주식별자로 이용하면 두 엔터티의 관계는 1:1 관계입니다. 만약 전달받은 식별자와 자신의 식별자를 합해서 식별자를 구성하면 두 엔터티는 1:M 관계입니다.
비식별자관계
관계엔터티로부터 속성을 전달받았지만 주식별자로 사용하지 않고 일반속성으로만 사용하는 관계입니다. 주로 다음과 같은 경우에 생성되는 관계입니다.
- 전달받은 속성이 필수가 아니어도 인스턴스를 생성하는데 문제가 없는 경우
- 엔터티 별로 생명주기가 달라 관계 엔터티가 먼저 소멸 될 수 있는 경우
- 여러 개의 엔터티를 통합할때 각 엔터티가 관련 엔터티들과 별도의 관계를 갖는 경우
- 전달받은 엔터티에 별도의 주 식별자를 생성하는 것이 유리하다고 판단되는 경우
관계를 식별자 관계로만 설정할 경우의 문제점
상위 엔터티에서 하위 엔터티로 상속이 진행될 수록 하위 엔터티의 식별자에 포함되어야하는 속성이 많아집니다. 원시 엔터티의 주식별자가 1개이고 관계가 1:M으로 전개되면 자식엔터티의 주식별자수는 상위 엔터티의 주식별자수 + 1개가 되야하기 때문입니다. 주식별자에 포함되는 컬럼이 과도하게 많으면 정확한 조인관계를 설정하는데 어려움이 커집니다.
관계를 비식별자 관계로만 설정할 경우의 문제점
엔터티에는 주요한 기준속성이 있습니다. 기준속성은 주로 조인을 위해 사용됩니다. 이런 기준속성은 부모엔터티에 있는 식별자가 상속되어 하위 엔터티에 존재하는 경우가 많습니다. 관계가 모두 비식별 관계로만 설정되어있다면 기준속성을 사용하기위해 상위 엔터티까지 조인해야하는 경우가 발생합니다. 이 경우 불필요한 조인이 유발되면서 구문이 길어지고 성능이 저하됩니다. 식별관계로 기준속성을 상속받아놓으면 상위엔터티를 조인할 필요없이 원하는 정보를 효율적으로 가져올 수 있습니다.
식별자관계/비식별자관계 모델링 방법
기본적으로 엔터티의 관계를 식별자로 설정하고 다음 조건에 해당할 경우 비식별자관계로 조정합니다.
관계의 강약분석 후 약한 관계로 판단되는 경우
자식테이블에 독립적인 PK가 필요한 경우
조인조건의 복잡도 증가로 개발생산성 저하가 우려되는 경우
식별자관계/비식별자관계 요약비교
| 식별자관계 | 비식별자관계 |
| - 강한 연결관계를 표현한다 - 자식엔터티의 식별자구성에 상위엔터티의 식별자가 모두 포함된다. - 실선으로 표현한다. - 자식 엔터티가 부모엔터티에 종속된다. - 상속받은 식별자를 하위 엔터티에 이전한다. |
- 약한 연결관계를 표현한다 - 자식엔터티의 일반속성에 상위엔터티의 식별자가 포함된다. - 점선으로 표현한다. - 자식 엔터티가 부모엔터티에 독립적이다. - 상속받은 식별자를 하위 엔터티로 부터 차단한다 |
'DB > 데이터모델링' 카테고리의 다른 글
| 데이터모델링이론 - 엔터티의 논리적 연결 관계를 표현하는 조인 (0) | 2024.01.16 |
|---|---|
| 데이터모델링이론 - 데이터 모델링시 정규화가 필요한 이유 (제1정규화, 제2정규화, 제3정규화, 반정규화) (0) | 2024.01.15 |
| 데이터모델링이론 - 엔터티의 관계와 관계명, 관계차수, 필수선택사양 (0) | 2024.01.10 |
| 데이터모델링이론 - 엔터티 개념 정리 (0) | 2024.01.09 |
| 데이터모델링 Part 3 - 엔터티, 관계, 속성, 이해관계자, ERD (0) | 2024.01.02 |