[SQLD]1장 데이터 모델링의 이해-5. 식별자

Yu River·2022년 7월 5일
0

SQL전문가가이드

목록 보기
5/34

1. 식별자 (Identifiers)

  • 엔터티를 대표할 수 있는 속성
  • 식별자라는 용어는 업무적으로 구분이 되는 정보로 생각할 수 있으므로 논리 데이터 모델링 단계에서 사용
  • 키는 데이터베이스 테이블에 접근을 위한 매개체로서 물리 데이터 모델링 단계에서 사용

2. ⭐️ 식별자의 특징

(1) 유일성

  • 주식별자에 의해 엔터티 내에 모든 인스턴스들을 유일하게 구분한다.

(2) 최소성

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

(3) 불변성

  • 한 번 특정 엔터티에 지정되면, 그 식별자의 값은 ⭐️ 변하지 않아야 한다.

(4) ⭐️ ⭐️존재성

  • 주식별자가 지정되면 (?) 반드시 데이터 값이 존재 (Null 안됨)해야 한다.
  • 외부식별자의 경우, 참조무결성 제약조건에 따른 특징을 가지고 있다.

3. 식별자 분류 및 표기법

(1) (?) 식별자 분류

(1-1) 대표성 여부

  • 주식별자: 각 어커런스를 구분할 수 있고 참조관계를 연결할 수 있는 식별자
  • 보조식별자: 각 어커런스를 구분할 수 있지만 대표성을 가지지 못해 참조관계로 연결할 수 없다.

(1-2) (?) 스스로 생성 여부

  • (?) 내부식별자: 내부에서 스스로 만들어지는 식별자
  • (?) 외부식별자: 타 엔터티와의 관계를 통해 받아오는 식별자

(1-3) 속성의 수

  • 단일식별자: 하나의 속성으로 구성된 식별자
  • 복합식별자: 둘 이상의 속성으로 구성된 식별자

(1-4) 대체 여부

  • (?) 본질식별자: 업무에 의해 만들어지는 식별자 (사번)
  • (?) 인조식별자: 원조식별자가 복잡한 구성을 가져서 인위적으로 만든 식별자

(2) 식별자 표기법

4. (?) 주식별자 도출기준

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

[예시]

  • 직원이라는 엔터티가 존재한다고 가정했을 때,
  • 유일하게 식별가능한 속성으로는 주민등록번호와 사원번호가 존재한다.
  • 사원번호가 그 회사에서 직원을 관리할 때 흔히 사용되므로 사원번호를 주식별자로 지정하고 주민등록번호는 보조식별자로 사용할 수 있다.

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

  • 명칭이나 내역이 있고 인스턴스들을 식별할 수 있는 다른 구분자가 존재하지 않을 경우는 새로운 식별자를 생성하도록 한다.
  • 보통 일련번호와 코드를 많이 사용한다.

(3) 복합으로 주식별자 구성 시, (?) 속성의 수가 너무 많아지지 않도록 한다.

  • 일반적으로 주식별자의 속성의 개수가 많으면(일반적으로 7~8 개 이상) 새로운 인조식별자를 생성하여 데이터 모델을 구성하는 것이 좋다.
    • 데이터 모델을 한층 더 단순하게 하고 애플리케이션을 개발할 때 조건절을 단순하게 할 수 있기 때문이다.

5. (?) 식별자관계와 비식별자 관계에 따른 식별자

(1) 식별자 관계와 비식별자 관계의 결정

  • 외부식별자는 자기 자신의 엔터티에서 필요한 속성이 아니라 다른 엔터티와의 관계를 통해 자식 엔터티에 생성되는 속성이며 Foreign Key 역할을 한다.
  • 자식 엔터티에서 부모 엔터티로부터 받은 외부식별자를 자신의 주식별자로 이용할 것인지 또는 부모와 연결이 되는 속성으로서만 이용할 것인지를 결정해야 한다.

(2)(?) 식별자관계

  • 자식 엔터티의 주식별자로 부모의 주식별자가 상속되는 경우를 지칭한다.
    • 부모로부터 받은 식별자를 자식엔터티의 주식별자로 이용하는 경우는 Null 값이 오면 안되므로 반드시 부모엔터티가 생성되어야 자기 자신의 엔터티가 생성되는 경우이다.
    • 부모로부터 받은 속성을 자식엔터티가 모두 사용하고 그것만으로 주식별자로 사용한다면 부모엔터티와 자식엔터티의 관계는 1:1 의 관계가 된다.
    • 부모로부터 받은 속성을 포함하여 다른 부모엔터티에서 받은 속성을 포함하거나 스스로 가지고 있는 속성과 함께 주식별자로 구성되는 경우는 1:M 관계가 된다.

(3)(?) 비식별자관계

  • 부모 엔터티로부터 속성을 받았지만, 자식 엔터티의 일반적인 속성으로만 사용하는 경우를 지칭한다.
    • 받은 속성이 반드시 필수가 아니어도 무방하다.
  • (?) 부모 없는 자식이 생성될 수 있는 경우
    - 엔터티별로 데이터의 생명주기를 다르게 관리할 경우
    - 여러 개의 엔터티가 하나로 통합되어 표현되었는데, 각각의 엔터티가 (?) 별도의 관계를 가지는 경우
    - 자식 엔터티에서 (?) 별도의 주식별자를 생성하는 것이 더 유리하다고 판단될 경우

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

  • 지속적으로 식별자 관계를 연결한 (?) 데이터 모델의 PK 속성의 수는 데이터 모델의 흐름이 길어질수록 증가할 수 밖에 없는 구조를 가지게 됨 된다.
    - 이는 개발 복잡성과 오류가능성을 유발시킬 수 있는 요인이다.

    (5) (?) 비식별자 관계로만 설정할 경우의 문제점

  • 단순하게 걸리는 이 하나의 조회 조건도 왼쪽과 같이 비식별자 관계로만 데이터 모델링을 전개하다 보면 SQL 구문에 ⭐️ 많은 조인이 걸리게 되고 그에 따라 복잡성이 증가하고 성능이 저하된다.
    • ⭐️ 식별자관계로 연결된 데이터모델의경우 주식별자에 부모의 PK가 포함되기 때문에 조인없이 자신의 테이블 안에서 정보를 검색이 가능하다.
  • 데이터 모델링을 전개할 때 각 엔터티 간의 관계를 비식별자 관계로 설정하면 이런 유형의 속성이 자식엔터티로 상속이 되지 않아 자식엔터티에서 데이터를 처리할 때 쓸데없이 부모엔터티까지 찾아가야 하는 경우가 발생한다.

(6) 식별자관계와 비식별자관계 모델링

1. 식별자관계 선택 프로세스

  1. 관계 분석
  2. 관계의 강/약 분석
    • ⭐️ 약한관계인 경우 비식별자 관계 설정을 고려한다.
  3. 자식테이블 독립 PK 필요한 경우
    • 독립 PK 구성시 비식별자 관계 설정을 고려한다.
  4. SQL 복잡도 증가 / 개발 생산성 저하가 우려되는 경우엗PK 속성을 단순화하기 위해 비식별자 관계 설정을 고려한다.

2. 식별자와 비식별자관계 비교

식별자 관계

  • 목적 : 강한 연결관계를 표현한다.
  • 자식 주식별자 영향 : 자식 주식별자의 구성에 포함된다.
  • 표기법 : 실선으로 표현한다.
  • 연결 고려사항
    • ⭐️ 반드시 부모 엔터티에 종속된다.
    • 지식 주식별자구성에 부모 주식별자가 포함되어야 한다.
    • 상속받은 주식별자 속성을 타 엔터티에 이전한다.

비식별자 관계

-목적 : 약한 연결관계를 표현한다.

  • 자식 주식별자 영향 : 자식 일반 속성에 포함된다.
  • 표기법 : 점선으로 표현한다.
  • 연결 고려사항
    • 약한 종속 관계
    • 자식 주식별자 구성을 독립적으로 구성한다.
    • 자식 주식별자 구성에 부모 주식별자 부분이 필요하다.
    • 상속받은 주식별자 속성을 타 엔터티에 차단해야 한다.
      • 부모쪽의 관계 참여가 선택관계이다.
profile
도광양회(韜光養晦) ‘빛을 감추고 어둠속에서 힘을 기른다’

0개의 댓글