식별자(Identifiers)란??
엔티티(Entity)는 인스턴스들의 집합이라는 개념으로, 여러 개의 집합체를 담고 있는 하나의 통에서 각각을 구분할 수 있는 논리적인 이름이 있어야 한다. 이 구분자를 식별자(Identifiers)라고 한다. 식별자란 하나의 엔티티에 구성되어 있는 여러 개의 속성 중에 엔티티를 대표할 수 있는 속성을 의미하며 하나의 엔터티는 반드시 하나의 유일한 식별자가 존재해야 한다. 보통 식별자와 키(Key)를 동일하게 생각하는 경우가 있는데 식별자라는 용어는 업무적으로 구분이 되는 정보로 생각할 수 있으므로 논리 데이터 모델링 단계에서 사용하고 키는 데이터베이스 테이블에 접근을 위한 매개체로서 물리 데이터 모델링 단계에서 사용한다.
식별자의 분류체계
분류 | 식별자 | 설명 |
대표성 여부 | 주 식별자 | 엔티티 내에서 각 인스턴스를 구분할 수 있는 구분자이며, 타 엔티티와 참조관계를 연결할 수 있는 식별자. |
보조 식별자 | 엔티티 내에서 각 인스턴스를 구분할 수 있는 구분자이나, 대표성을 가지지 못해 참조관계 연결을 못함. | |
스스로 생성 여부 | 내부 식별자 | 엔티티 내부에서 스스로 만들어지는 식별자. |
외부 식별자 | 타 엔티티와의 관계를 통해 타 엔티티로부터 받아오는 식별자. | |
속성의 수 | 단일 식별자 | 하나의 속성으로 구성된 식별자. |
복합 식별자 | 둘 이상의 속성으로 구성된 식별자. | |
대체 여부 | 본질 식별자 | 업무에 의해 만들어지는 식별자. |
인조 식별자 | 업무적으로 만들어지지는 않지만 원조 식별자가 복잡한 구성을 가지고 있기 때문에, 인위적으로 만든 식별자. |
주식별자의 특징
주식별자인지 아니면 외부식별자인지 등에 따라 특성이 다소 차이가 있다.
1) 주식별자에 의해 엔티티내에 모든 인스턴스들이 유일하게 구분되어야 한다(유일성)
2) 주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수가 되어야 한다(최소성)
3) 지정된 주식별자의 값은 자주 변하지 않는 것이어야 한다(불변성)
4) 주식별자가 지정이 되면 반드시 데이터 값이 들어와야 한다. NULL 안됨(존재성)
식별자관계와 비식별자 관계에 따른 식별자
외부식별자(Foreign Identifier)는 자기 자신의 엔터티에서 필요한 속성이 아니라 다른 엔터티와의 관계를 통해 자식 쪽에 엔터티에 생성되는 속성을 외부식별자라 하며 데이터베이스 생성 시에 Foreign Key역할을 한다. 관계와 속성을 정의하고 주식별자를 정의하면 논리적인 관계에 의해 자연스럽게 외부식별자가 도출되지만 중요하게 고려해야 할 사항이 있다. 엔티티에 주식별자가 지정되고 엔티티간 관계를 연결하면 부모쪽의 주식별자를 자식엔티티의 속성으로 내려 보낸다. 이 때 자식엔티티에서 부모엔티티로부터 받은 외부식별자를 자신의 주식별자로 이용할 것인지 또는 부모와 연결이 되는 속성으로서만 이용할 것인지를 결정해야 한다.
식별자 관계 | 비식별자 관계 | |
정리 | 부모 엔티티로부터 속성을 받아 자식엔티티의 주식별자로 사용하는 경우. | 부모 엔티티로부터 속성을 받았지만 자식엔티티의 주식별자로 사용하지 않고, 일반적인 속성(즉, 일반 속성 외부식별자)으로 사용하는 경우. |
중요 특징 포인트 | 이 경우는 Null값이 오면 안되므로 반드시 부모엔티티가 생성되어야 자기 자신의 엔티티가 생성되야 함. ① 부모로부터 받은 속성을 자식엔티티가 모두 사용하고 그것만을 주식별자로 사용한다면 부모엔티티와 자식엔티티의 1:1 관계. ② 부모로부터 받은 속성 이외에, 다른 부모로부터 받은 속성을 포함하거나 스스로 가지고 있는 속성과 함께 주식별자로 구성되는 경우는 1:M관계. |
① 약한 종속관계 ② 자식 주식별자 구성을 독립적으로 구성 ③ 상속받은 주식별자속성을 타 엔티티에 차단 필요 ④ 부모쪽의 관계참여가 선택관계 |
한쪽으로만 치우친 관계 설정 시 나타나는 문제 |
식별자 관계로만 관계를 구성하면 조인조건의 개수가 많아지기 때문에, 개발자 복잡성과 오류가능성을 유발시킬 수 있는 요인이 될 수 있다. | 비식별자 관계로만 관계를 구성하면 많은 조인이 걸리게 되고, 그에 따라 복잡성이 증가하고 성능이 저하되는 문제가 생길 수 있다. |
표기법 | 실선으로 표현. | 점선으로 표현. |
'Database' 카테고리의 다른 글
(Non)Equi join 및 표준 조인(inner, outer, natural, self, cross join, using, on조건절) (0) | 2020.09.14 |
---|---|
SELECT 문장 실행 순서와 Order by, ROWNUM조건 (0) | 2020.09.12 |
트랜잭션의 특성(Commit, Rollback, Savepoint) (0) | 2020.09.10 |
DDL과 DML 및 Delete와 Truncate문 비교 (0) | 2020.09.09 |
정규화와 반정규화 및 대량 데이터에 따른 성능 (0) | 2020.09.08 |