엔터티의 속성 중 식별자(identifier)는 흔히 키(key)라고 불리며 일차적으로 엔터티(Table)에서 인스턴스(Row)를 구분할 수 있게 만들어준다. 구분자로서의 기능에 더해 식별자는 한 테이블을 다른 테이블들과 연결시키는 매개자 역할도 수행한다. 어떻게 보면 엔터티의 가장 중요한 속성이라고 할 수 있다.
엔터티는 여러 개의 식별자를 가질 수 있다. 예를 들어 학생의 학번과 학생 정보 테이블 안에서 각 인스턴스의 일련번호는 모두 식별자 역할을 할 수 있다. 이렇게 여러 개의 식별자 중 가장 우선적으로 사용되는 식별자를 '주식별자(Primary Key, PK)'라고 한다. 예를 들어 학생 데이터에서는 학번이 PK가 될 것이다. 그리고 테이블 안에서 각 인스턴스를 식별할 수 있도록 해 주지만 우선 순위가 낮은 식별자들을 '보조식별자(Alternate Key)'라고 부른다.
주식별자는 엔터티에서 가장 중요한 속성이다. 주식별자가 반드시 만족시켜야 할 속성들을 정리하면 아래와 같다.
유일성 | 각 인스턴스에 유일성(uniqueness)을 부여할 수 있어야한다. |
최소성 | 유일성을 보장하되 최소 개수로 이루어져야 한다. |
불변성 | 속성의 값이 변해서는 안된다. |
존재성 | 속성값이 Null일 수 없다. |
앞에서 엔터티의 속성 중 가장 중요한 속성인 '주식별자'에 관해 살펴보았다. 범위를 조금 넓혀서 식별자에 대한 일반적인 내용에 대해 살펴보자. 식별자를 ⓐ대표성 여부, ⓑ엔터티 내부에서 생성되었는지 여부, ⓒ단일 속성으로 구성되어 있는지 여부, 그리고 ⓓ대체여부의 관점에서 살펴볼 수 있다.
ⓐ대표성 여부
주식별자(Primary Identifier) | · 유일성, 최소성, 불변성, 존재성을 만족시키는 식별자 · 다른 엔터티와 참조 관계에 사용된다. |
보조식별자(Alternate Identifier) | · 유일성, 최소성, 불변성, 존재성을 만족시키는 식별자 · 다른 엔터티와 참조 관계에 사용되지 않는다. |
ⓑ엔터티 내부에서 생성되었는지 여부
내부식별자(Internal Identifier) | 엔터티 내부 정보를 기반으로 생성한 식별자 |
외부식별자(Foreign Identifier) | 다른 엔터티에서 가져온 식별자 |
ⓒ단일 속성으로 구성되어 있는지 여부
단일식별자(Single Identifier) | 하나의 속성으로 구성된 식별자 |
복합식별자(Composite Identifier) | 둘 이상의 속성으로 구성된 식별자. Composite Key(CK) |
ⓓ대체 여부
원조식별자(Original Identifier) | 업무 프로세스에 존재하는 가공되지 않은 본질 식별자 |
대리식별자(Surrogate Identifier) | 주식별자의 속성이 두 개 이상인 경우 해당 속성들을 하나로 묶어서 사용하는 인조식별자 |
식별자의 가장 첫 번째 역할은 엔터티에서 인스턴스를 구분할 수 있도록 만들어 주는것이다. 여기에 더해 식별자는 하나의 엔터티와 다른 엔터티를 연결시켜주는 기능도 수행한다. 예를 들어 게시글과 댓글은 식별자를 매개로 하여 아래와 같이 연결될 수 있다.
ⓐ 식별자 관계(Identification Relationship)
한 엔터티(부모)의 식별자가 다른 엔터티(자식)의 주식별자가 되는 관계이다. 이 경우 부모 엔터티 없이 자식 엔터티는 생성이 불가능하며 부모-자식 사이의 관계는 1:1(단일식별자인 경우) 또는 1:M(복합식별자인 경우)이 된다.
하지만 엔터티들이 연결되지 않을 수도 있다. 이 경우 비식별자 관계라고 한다.
ⓑ 비식별자 관계(Non-Identification Relationship)
한 엔터티(부모)의 식별자가 다른 엔터티(자식)의 일반속성으로 포함된다. 예로 주문-상품 관계를 생각해 볼 수 있다. 주문은 속성으로 상품코드를 포함하지만 상품은 주문 없이도 존재할 수 있다. ER 다이어그램에서 점선으로 표시된다.
■
'데이터 모델과 SQL' 카테고리의 다른 글
[SQL 이해하기] - 6. 반정규화 (0) | 2023.05.26 |
---|---|
[SQL 이해하기] - 5. 정규화 (0) | 2023.05.23 |
[SQL 이해하기] 3. 데이터의 이해 - 속성과 관계 (1) | 2023.05.10 |
[SQL 이해하기] 2. 데이터의 이해 - 엔터티 (0) | 2023.05.09 |
[SQL 이해하기] 1. 데이터 모델링의 이해 (0) | 2023.05.09 |
댓글