[Part 1] 5. 식별자(Identifiers)

yuzu sim's avatar
Aug 08, 2024
[Part 1] 5. 식별자(Identifiers)

1. 식별자

  • 하나의 엔터티에 구성된 여러 개의 속성 중에 엔터티를 대표할 수 있는 속성을 나타냄
  • 하나의 유일한 유일한 식별자가 존재해야 함
  • 식별자는 논리 모델링에서 사용하는 용어, 물리 모델링에서는 키(key)라고 표현 ex) 학생 엔터티의 주식별자는 학생번호 속성 => 학생 테이블의 기본키는 학생번호 컬럼 (논리 모델링) (물리 모델링)
 

2. 주식별자 특징

2-1. 유일성

  • 주식별자에 의해 모든 인스턴스를 유일하게 구분함 (각 인스턴스에 유니크함을 부여)
  • ex) 학생 엔티티에서 이름 속성은 동명이인이 발생할 수 있으므로 모든 인스턴스를 완벽하게 구분할 수 없으므로 학생번호와 같은 유일한 식별자를 주식별자로 사용

2-2. 최소성

  • 주식별자를 구성하는 속성은 유일성을 만족하는 최소한의 속성으로 구성
  • ex) 학생 엔터티의 주식별자는 학생번호만으로 충분한데, 학생번호 + 이름으로 구성할 필요 없음

2-3. 불변성

  • 주식별자가 한번 특정 엔터티에 지정되면 그 식별자의 값은 변하지 않아야 함 (항상 고유값으로 존재해야 함)
  • ex) 학생 엔티티에 주식별자인 학생번호가 때에 따라 변경되어서는 안됨

2-4. 존재성

  • 주식별자가 지정되면 반드시 값이 존재해야 하며 NULL 은 허용 안 됨
 

3. 식별자 분류

3-1. 대표성 여부에 따른 식별자의 종류

주식별자
보조식별자
- 유일성과 최소성을 만족하면서 엔터티를 대표하는 식별자 - 엔터티 내에서 각 인스턴스를 유일하게 구분할 수 있는 식별자 - 타 엔터티와 참조관계를 연결할 수 있는 식별자
- 엔터티 내에서 각 인스턴스를 구분할 수 있는 구분자지만, 대표성을 가지지 못해 참조 관계 연결을 할 수 없는 식별자 - 유일성과 최소성은 만족하지만 대표성을 만족하지 못하는 식별자
  • ex) 주민번호 (유일성과 최소성은 만족하지만 대표성을 만족하지 못하는 식별자 )
    • 보안상 문제, 식별자 대상은 조회 대상으로 자주 등장하는 대상일 수록 좋다.
    • 주민번호로 개인의 데이터를 조회하진 않는다.
    • 식별자이긴하나 주로 사용될수 없다.
 

3-2. 생성 여부에 따른 식별자의 종류

내부식별자
외부식별자
- 다른 엔터티 참조 없이 엔터티 내부에서 스스로 생성되는 식별자
- 다른 엔터티와 관계로 인하여 만들어지는 식별자 (외래키)
  • ex) 사원에 대한 주소 정보를 저장할때 우편번호 컬럼이 있었다.
  • ex) 우편번호는 존재하는 값이어야 하니까 주소에 대한 값을 저장하는 또 다른 엔터티가 있다.

3-3. 속성 수에 따른 식별자 종류

단일식별자
복합식별자
- 하나의 속성으로 구성
- 2 개 이상의 속성으로 구성
 

3-4. 대체 여부에 따른 식별자의 종류

본질식별자(원조식별자)
인조식별자
- 비즈니스 프로세스에서 만들어지는 식별자
- 인위적으로 만들어지는 식별자 - 자동 증가하는 일련번호 같은 형태
  • ex) 부서코드: 부서 식별에 필요한 본질 식별자
  • ex) 주문번호: 주문일자 + 주문순서 + 상품코드 대신 만든 인조 식별자

4. 식별자 표기법

notion image

5. 주식별자 도출기준

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

  • 같은 식별자 조건을 만족하더라도 업무적으로 더 많이 사용되는 속성을 주식별자로 지정 ex) 학생번호와 주민번호 중에 학생번호가 주식별자, 주민번호는 보조식별자

5-2. 명칭이나 내역등과 같은 이름은 피함

  • 이름 자체를 주식별자로 사용하는 행위를 피함 ex) (부서코드가 정의되지 않은 경우) 부서명 보다는 부서코드를 인위적으로 생성하여 부서코드를 주식별자로 사용

5-3. 속성의 수를 최대한 적게 구성

  • 주식별자를 너무 많은 속성으로 구성 시, 조인으로 인한 성능저하 발생 우려
  • 일반적으로 7~8 개 이상의 주식별자 구성은 새로운 인조식별자를 생성하여 모델을 단순화 시키는 것이 좋음 ex) 주문 엔터티에 대해 주문일자 + 주문상품코드 + 고객번호 + .... 등으로 구성 => 주문번호 속성 추가!

6. 관계간 엔터티 구분

6-1. 강한 개체

  • 독립적으로 존재할 수 있는 엔터티 ex) 고객과 계좌 엔터티 중, 고객은 독립적으로 존재할 수 있음

6-2. 약한 개체

  • 독립적으로 존재할 수 없는 엔터티 ex) 고객과 계좌 엔터티 중, 계좌은 독립적으로 존재할 수 없음(고객에 의해 파생되는 엔터티)

7. 식별자 관계와 비식별자관계

7-1. 식별자 관계(Identification Relationship)

  • 하나의 엔터티의 기본키를 다른 엔터티가 기본키의 하나로 공유하는 관계
  • 식별관계는 ERD 에서 실선으로 표시 ex) 게시글과 댓글 엔터티에서 양쪽 모두 기본키 중 일부가 게시글번호임
notion image
 

7-2. 비식별자 관계(Non-identification Relationship)

  • 강한 개체의 기본키를 다른 엔터티의 기본키가 아닌 일반 속성으로 관계를 가지는 것
  • 비식별관계는 ERD 에서 점선으로 표시 ex) 부서와 사원의 관계에서 부서의 부서번호(기본키)를 사원 엔터티에서는 일반키로 가짐 (사원에서는 사원번호가 기본키)

8. Key 의 종류

논리 모델링에서의 식별자가 물리 모델링에서는 Key 가 되는데 이를 Key 의 특징에 따라 다음과 같이 분류

8-1. 기본키(Primary Key)

  • 엔터티를 대표할 수 있는 키

8-2. 후보키(Candidate Key)

  • 유일성(유니크한 특성)과 최소성(최소한의 컬럼으로 유일성을 만족하는 특징)을 만족하는 키
  • 결국 후보키들 중 하나가 기본키가 되고, 나머지를 대체키라고 부름

8-3. 슈퍼키(Super Key)

  • 유일성은 만족하지만 최소성은 만족하지 않는 키 ex) 학생 테이블에서 학번으로만 PK 를 구성해도 되는데, (학번 + 이름)으로 구성한다면 이는 슈퍼키임

8-4. 대체키(Alternate Key)

  • 여러 후보키 중 기본키가 아닌 키

8-5. 외래키(Foreign Key)

  • 다른 테이블의 기본키를 참조하는 키(다른 테이블의 기본키에 존재하는 값만 입력될 수 있는 특성을 갖는 키)
  • 참조 테이블은 하나 또는 여러 개 가능
 
Share article

Coding_study