
식별자(Identifiers) 개념
- 엔터티는 인스턴스들의 집합이라고 하였다. 여러 개의 집합체를 담고 있는 하나의 통에서 각각을 구분할 수 있는 논리적인 이름이 있어야 한다. 이 구분자를 식별자(Identifier)라고 한다.
- 엔터티내의 각 인스턴스를 개별적으로 식별하기 위해 사용된다
고객(고객번호) | 사원(사원번호) | 주문(주문번호) | 상품(상품번호) |
* 식별자는 엔터티내에서 인스턴스들을 구분할 수 있는 구분자 이다.
식별자의 특징
- 주식별자에 의해 엔터티내에 모든 인스턴스들이 유일하게 구분되어야 한다.
- 주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수가 되어야 한다.
- 지정된 주식별자의 값은 자주 변하지 않는 것이어야 한다.
- 주식별자가 지정이 되면 반드시 값이 들어와야 한다.
특징 | 내용 | 비고 |
유일성 | 주식별자에 의해 엔터티내에 모든 인스턴스들을 유일하게 구분함 |
예) 사원번호가 주식별자가 모든 직원들에 대해 개인별로 고유하게 부여됨 |
최소성 | 주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수가 되어야 함 |
예) 사원번호만으로 고유한 구조인데 사원분류코드 + 사원번호로 식별자가 구성될 경우 부적절한 주식별자 구조임 |
불변성 | 주식별자가 한 번 특정 엔터티에 지정되면 그 식별자의 값은 변하지 않아야 함 | 예) 사원번호의 값이 변한다는 의미는 이전기록이 말소되고 새로운 기록이 발생되는 개념임 |
존재성 | 주식별자가 지정되면 반드시 데이터 값이 존재(Null 안됨) 해야함 | 예) 사원번호 없는 회사직원은 있을 수 없음 |
유-최-불-존
식별자 분류
보조식별자 ? 주민등록번호는 대표성을 가지지 못해 연결을 지을 수 없음 -> 아래 도출기준 참고
외부식별자 ? 주문엔터티에 있는 고객번호
식별자 도출 기준
- 해당 업무에서 자주 이용되는 속성을 주식별자로 지정한다.
- 명칭, 내역 등과 같이 이름으로 기술되는 것들은 가능하면 주식별자로 지정하지 않는다.
- 복합으로 주식별자로 구성할 경우 너무 많은 속성이 포함되지 않도록 한다.
- 주민등록번호도 식별자 후보가 될 수 있지만 해당 업무에서 자주 사용하는 직원번호를 주식별자로 지정함
- 직원명과 같은 이름은 주식별자로 지정하지 않음(동명이인이 없다고 해도 지정하면 안됨)
- 직원번호 + 주민등록번호로 복합식별자로 하면 유일성을 보장하지만 직원번호만으로 충분하기 때문에 직원번호로만 지정함
식별자관계와 비식별자 관계의 결정
- 외부식별자(Foreign Identifier)는 자기 자신의 엔터티에서 필요한 속성이 아니라 다른 엔터티와의 관계를 통해 자식 쪽 엔터티에 생성되는 속성을 외부식별자라 하며 데이터베이스 생성 시에 Foreign Key역할을 한다.
- 자식엔터티에서 부모엔터티로부터 받은 외부식별자를 자신의 주식별자로 이용할 것인지(식별자 관계) 또는 부모와 연결이 되는 속성으로서만 이용할 것인지를 결정(비식별자 관계)해야 한다.
* 엔터티 사이 관계 유형은 업무 특징, 자식엔터티의 주 식별자 구성, SQL전략에 의해 결정된다.
식별자 관계
- 자식엔터티의 주 식별자로 부모의 주식별자가 상속이 되는 경우를 식별자 관계(Identifying Relationship)라고 지칭한다.
- 부모로부터 받은 식별자를 자식엔터티의 주식별자로 이용하는 경우는 Null값이 오면 안되므로 반드시 부모엔터티가 생성되어야 자기 자신의 엔터티가 생성되는 경우이다.
- 외부 식별자의 주 식별자 역할
- 즉 부모의 식별자가 자식에게도 식별자 역할을 한다.
비식별자 관계
- 부모엔터티로부터 속성을 받았지만 자식엔터티의 주식별자로 사용하지 않고 일반적인 속성으로만 사용하는 경우가 있다. 이와같은 경우를 비식별자 관계(Non-Identifying Relationship)라고 하며 다음의 네 가지 경우에 비식별자 관계에 의한 외부속성을 생성한다.
- 자식엔터티에서 받은 속성이 반드시 필수가 아니어도 무방하기 때문에 부모 없는 자식이 생성될 수 있는 경우이다.
- 자식엔터티에 주식별자로 사용하여도 되지만 자식엔터티에서 별도의 주식별자를 생성하는 것이 더 유리하다고 판단될 때 비식별자 관계에 의한 외부식별자로 표현한다.
- 외부 식별자는 FK로써의 역할을 함
- 즉 부모의 식별자는 자식에게 식별자 역할을 하지않고 FK로써의 역할을 한다.
식별자 관계 : 접수 엔터티가 3개, 비식별자 관계 : 접수 엔터티가 1개
식별자 관계로만 설정할 경우의 문제점
- 식별자 관계 - 주문 엔터티가 고객 엔터티의 고객번호를 식별자로 받음
- 비식별자 관계 - 주문엔터티가 주문번호라는 식별자를 별도로 이용
* 고객 -> 주문만 비식별자 관계, 주문 -> 주문상세 -> 주문상세변경내역은 식별자 관계
중간에 | 바 표시가 식별자 관계임을 표시
- 지속적으로 식별자 관계를 연결한 데이터 모델의 PK속성의 수는 데이터 모델의 흐름이 길어질수록 증가할 수 밖에 없는 구조를 가지게 된다.
- 개발자가 개발할 때 당연히 데이터 모델을 참조하면서 엔터티와 관계를 이용하여 개발해야 하는데 생성된 엔터티 스키마정보만을 보고 개발하는 경우가 많다
- 조인에 참여하는 주식별자속성의 수가 많을 경우 정확하게 조인관계를 설정하지 않고 즉, 누락하여 개발하는 경우가 간혹 발견되기도 한다.
- 정리하면 식별자 관계만으로 연결된 데이터 모델의 특징은 주식별자 속성이 지속적으로 증가할 수 밖에 없는 구조로서 개발의 복잡성과 오류가능성을 유발시킬 수 있는 요인이 될 수 있다는 사실을 기억해야 한다.
식별자관계와 비식별자관계
- 실제로 프로젝트를 전개할 때 식별자관계와 비식별자관계를 취사선택하여 연결하는 내공은 높은 수준의 데이터모델링의 기술이라 할 수 있다.
- 식별자관계에서 비식별자관계를 파악하는 기술이 필요한데 다음 흐름(Flow)에 따라 비식별자관계를 선정한다면 합리적으로 관계를 설정하는 모습이 될 수 있다. 기본적으로 식별자관계로 모든 관계가 연결되면서 다음 조건에 해당할 경우 비식별자관계로 조정하면 된다.
항목 | 식별자 관계 | 비 식별자 관계 |
목적 | 강한 연결 관계 표현 | 약한 연결 관계 표현 |
자식 주 식별자 영향 | 자식 주 식별자의 구성에 포함됨 | 자식 일반 속성에 포함됨 |
연결 고려사항 | * 반드시 부모 엔터티 종속 * 자식 주식별자구성에 부모 주식별자포함 필요 * 상속받은 주식별자속성을 타 엔터티에 이전 필요 |
* 약한 종속관계 * 자식 주식별자구성을 독립적으로 구성 * 상속받은 주식별자속성을 타 엔터티에 차단 필요 * 부모 쪽의 관계 참여가 선택관계일수 있음 |
'자격증 정리 > SQLD' 카테고리의 다른 글
Chapter 02 ) 데이터 모델과 성능 (1) - 성능 데이터 모델의 개요 (0) | 2023.03.08 |
---|---|
Chapter 01 ) 데이터 모델링의 이해 연습문제 오답노트 (0) | 2023.03.08 |
Chapter 01 ) 데이터 모델링의 이해 (4) - 관계 (0) | 2023.03.06 |
Chapter 01 ) 데이터 모델링의 이해 (3) - 속성 (0) | 2023.03.05 |
Chapter 01 ) 데이터 모델링의 이해 (2) - 엔터티 (0) | 2023.03.04 |