으쌰으쌰💪/SQL

데이터 모델링 - 식별자 (Identifiers)

_꼬마돌 2023. 8. 15. 21:20
반응형

식별자의 개념

1. 엔티티는 인스턴스들의 집합. 여러 개의 집합체를 담고 있는 하나의 통에서 각각을 구분할 수 있는 논리적인 이름이 있어야 한다. 이 구분자를 식별자라고 한다.

2. 엔티티 내의 각 인스턴스를 개별적으로 식별하기 위해 사용된다. 

 

식별자의 특징

유일성 - 주 식별자에 의해 엔티티 내의 모든 인스턴스들이 유일하게 구분되어야 한다. 

예) 사원번호가 주 식별자로 모든 직원들에 대해 개인별로 고유하게 부여됨.

 

최소성 - 주 식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수가 되어야 한다. 

예) 사원번호만으로도 고유한 구조인데 사원분류코드 + 사원번호로 식별자가 구성될 경우 부적절한 주 식별자 구조임.

 

불변성 - 지정된 주 식졀자의 값은 자주 변하지 않는 것이어야 한다. 

예) 사원번호의 값이 변한다는 의미는 이전 기록이 말소되고 새로운 기록이 발생되는 개념임.

 

존재성 - 주 식별자가 지정이 되면 반드시 값이 들어와야 한다. 

예) 사원번호 없는 회사 직원은 있을 수 없음.

 

식별자 분류

 

식별자 도출 기준

1. 해당 업무에서 자주 이용되는 속성을 주식별자로 지정한다.

2. 명칭, 내역 등과 같이 이름으로 기술되는 것들은 가능하면 주 식별자로 지정하지 않는다. 

3. 복합으로 주 식별자를 구성할 경우 너무 많은 속성이 포함되지 않도록 한다. 

 

 

- 주민등록번호도 식별자 후보가 될 수 있지만, 해당 업무에서 자주 사용하는 사원번호를 주 식별자로 지정한다.
- 직원 이름과 같은 '이름'은 주 식별자로 지정하지 않는다. (동명이인이 없다고 해도 지정해서는 안 된다.)
- 직원번호 + 주민등록번호로 복합 식별자를 지정하면 유일성을 보장하지만 직원번호만으로도 충분하기 때문에 직원번호로만 지정한다. 

 

 

 

주 식별자 속성이 과도하게 많아지는 경우, 인조식별자를 통해 주 식별자 속성을 단순화하는 게 좋다. (SQL문이 비효율적으로 복잡해질 수 있다.) 모델상에 표현하는 문장의 간편성 뿐만 아니라 어플리케이션 구성에 있어서도 복잡한 소스구성을 피하기 위하여 과도한 복합키는 배제하도록 노력해야 한다. 

 

식별자 관계와 비식별자 관계의 결정

1. 외부식별자 (Foreign Identifier)는 자신의 엔티티에 필요한 속성이 아니라 다른 엔티티와의 관게를 통해 조식 쪽 엔티티에 생성되는 속성을 말한다. 데이터베이스 생성 시에 Foreign Key 역할을 한다. 

2. 자식 엔티티에서 부모 엔티티로부터 받은 외부식별자를 자신의 주 식별자로 이용할 것인지(식별자 관계), 또는 부모와 연결이 되는 속성으로서만 이용할 것인지를 결정(비식별자 관계)해야 한다. 

엔티티 사이 관계 유형은 업무 특징, 자식엔티티의 주 식별자 구성, SQL 전략에 의해 결정된다. 

 

식별자 관계

1. 자식엔티티의 주식별자로 부모의 주 식별자가 상속이 되는 경우를 식별자 관계 (Identifying Relationship)라고 한다.

2. 부모로부터 받은 식별자를 자식엔티티의 주 식별자로 이용하는 경우는 Null값이 오면 안 되므로 반드시 부모엔티티가 생성되어야 자기 자신의 엔티티가 생성되는 경우이다. 

- 외부 식별자의 주 식별자 역할. 즉 부모의 식별자가 자식에게도 식별자 역할을 한다. 

 

비식별자 관계

1. 비식별자 관계(Non-idntifying Relationship)은 부모엔티티로부터 속성을 받았지만 자식 엔티티의 주 식별자로 사용하지 않고 일반적인 속성으로만 사용하는 경우를 말한다.

2. 자식 엔티티에서 받은 속성이 반드시 필수가 아니어도 무방하기 때문에 부모 없는 자식이 생성될 수 있는 경우이다. 

3. 자식 엔티티에 주 식별자로 사용해도 되지만 자식 엔티티에서 별도의 주 식별자를 생성하는 것이 더 유리하다고 판단될 때 비식별자 관계에 의한 외부 식별자로 표현한다. 

- 외부 식별자는 FK로서의 역할을 한다. 즉 부모의 식별자는 자식에게 식별자 역할을 하지 않고 FK로서의 역할을 한다. 

 

식별자 관계로만 설정할 경우의 문제점

- 지속적으로 식별자 관계를 연결한 데이터 모델의 PK속성의 수는 데이터 모델의 흐름이 길어질수록 증가할 수 밖에 없는 구조를 가지게 된다. 

- 개발자가 개발할 때 당연히 데이터 모델을 참조하면서 엔티티와 관계를 이용하여 개발해야 하는데 생성된 엔티티 스키마 정보만을 보고 개발하는 경우가 많다. 

- 조인에 참여하는 주 식별자 속성의 수가 많을 경우 정확하게 조인관계를 설정하지 않고, 즉 누락하여 개발하는 경우가 간혹 발견되기도 한다. 

- 정리하면 식별자 관계만으로 연결된 데이터 모델의 특징은 주 식별자 속성이 지속적으로 증가할 수 밖에 없는 구조로서 개발의 복잡성과 오류 가능성을 유발시킬 수 있는 요인이 될 수 있다는 사실을 기억해야 한다. 

 

식별자와 비식별자 관계

1. 실제로 프로젝트를 전개할 때, 식별자와 비식별자 관계를 취사선택하여 연결하는 내공은 높은 수준의 데이터 모델링의 기술이라 할 수 있다. 

2. 식별자관계에서 비식별자관계를 파악하는 기술이 필요한데 다음 흐름에 따라 비식별자 관계를 선정한다면 합리적으로 관계를 설정하는 모습이 될 수 있다. 기본적으로 식별자관계로 모든 관계를 연결하고 다음 조건에 해당할 경우 비식별자관계로 조정하면 된다. 

 

 

식별자 관계

- 강한 연결 관계 표현

- 자식의 주 식별자 구성에 포함됨

- 반드시 부모 엔티티에 종속

- 자식 주 식별자 구성에 부모 주 식별자 포함

- 상속받은 주 식별자속성을 타 엔티티에 이전 필요

 

비식별자 관계

- 약한 연결 관계 표현

- 자식 일반 속성에 포함됨

- 약한 종속관계

- 자식 주 식별자 구성을 독립적으로 구성

- 상속받은 주 식별자 속성을 타 엔티티에 차단 필요

- 부모 쪽의 관계 참여가 선택관계일 수 있음

반응형