[1과목] 14. 식별자

yeomss·2022년 3월 4일
0

SQLD

목록 보기
14/14
post-thumbnail

식별자 개념


  • Identifiers
  • 엔터티는 각 인스턴스의 집합이다.
  • 여러 개의 집합체를 담고 있어 각각을 구분할 수 있는 논리적인 이름이 있어야 한다.
  • 이를 식별자라고 한다.

하나의 엔터티에 구성되어 있는 여러 개의 속성 중에 엔터티를 대표할 수 있는 속성

  • 하나의 엔터티에는 반드시 하나의 유일한 식별자가 존재해야 한다.

식별자의 특징


주식별자의 특징

  1. 유일성 : 주식별자에 의해 엔터티 내에 모든 인트선스들이 유일하게 구분되어야 한다.
  2. 최소성 : 주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수가 되어야 한다.
    1. 사원번호만으로도 고유한 구조인데 사원분류코드 + 사원번호로 식별자가 구성될 경우 → 부적절
  3. 불변성 : 지정된 주식별자의 값은 자주 변하지 않는 것이어야 한다.
  4. 존재성 : 주식별자가 지정이 되면 반드시 값이 들어와야 한다.

외부 식별자의 경우 주식별자 특징과 일치하지 않으며, 참조 무결성 제약 조건에 따른 특징을 가지고 있다.

식별자 분류 및 표기법


식별자 분류

  1. 자신의 엔터티 내에서 대표성을 가지는가 (대표성 여부)
    • 주식별자 (Primary Identifier)
    • 보조 식별자 (Alternate Identifier)
  2. 엔터티 내에서 스스로 생성되었는가 (스스로 생성 여부)
    • 내부 식별자
    • 외부 식별자 (Foreign Identifier)
  3. 단일 속성으로 식별되는가 (단일 속성 여부)
    • 단일 식별자 (Single Identifier)
    • 복합 식별자 (Composit Identifier)
  4. 업무적으로 의미가 있는가 (대체 여부)
    • 본질 식별자
    • 인조 식별자

식별자 표기법

주식별자 도출 기준


데이터 모델링 작업에서 중요한 작업 중의 하나가 주식별자 도출 작업이다. 도출하기 위한 기준을 정리하면 다음과 같다.

  1. 해당 업무에서 자주 이용되는 속성을 주식별자로 지정한다.
  2. 명칭, 내역 등과 같이 이름으로 기술되는 것들은 가능하면 주식별자로 지정하지 않는다.
  3. 복합으로 주식별자로 구성할 경우 너무 많은 속성이 포함되지 않도록 한다.

해당 업무에서 자주 이용되는 속성을 주식별자로 지정하도록 함

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

명칭, 내역 등과 같이 이름으로 기술되는 것은 피함

예를 들어, 한 회사에 부서이름이 100개가 있다고 할 때, 각각의 부서이름은 유일하게 구별될 수 있다고하여 부서이름을 주식별자로 지정하지 않도록 해야 한다. 만약 부서이름을 주식별자로 선정하면 물 리데이터베이스로 테이블을 생성하여 데이터를 읽을 때 항상 부서이름이 WHERE 조건절에 기술되는 현상이 발생된다. 부서이름은 많은 경우 20 자 이상이 될 수 있으므로 조건절에 정확한 부서이름을 기술하기는 쉬운 일이 아니다.
  • 명칭이나 내역이 있고 인스턴스들을 식별할 수 있는 다른 구분자가 존재하지 않을 경우 일련번호나 코드와 같은 새로운 식별자를 생성하도록 한다.

속성의 수가 많아지지 않도록 함

  • 복합으로 구성되어 주식별자가 될 수 있을 때 가능하면 주식별자를 선정하기 위한 속성의 수가 많지 않도록 해야 한다.

  • 복잡한 주식별자를 임의의 주식별자를 생성하여 단순화한 경우의 예시

식별자관계와 비식별자관계에 따른 식별자


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

  • 외부 식별자는 자기 자신의 엔터티에서 필요한 속성이 아니라 다른 엔터티와의 관계를 통해 자식 쪽에 엔터티에 생성되는 속성을 이른다. FK 의 역할을 한다.

  • 상속을 할 때 부모 식별자가 자식 엔터티의 속성으로 전달된다.
  • 이때, 자식 엔터티에서 부모로 부터 물려받은 외부 식별자를 자신의 주식별자로 이용할 것인지 또는 부모와 연결이 되는 속성으로서만 이용할 것인지를 결정한다.

식별자 관계

부모로부터 받은 식별자를 주식별자로 사용하는 경우

  • 부모로부터 받은 식별자를 자식 엔터티의 주식별자로 이용하는 경우 Null 값이 오면 안된다. (존재성)
  • 따라서, 이 경우 반드시 부모 엔터티가 생성되어야 자기 자신의 엔터티가 생성된다.
    • 부모로 받은 속성을 자신 엔터티가 모두 사용하고, 주식별자로 사용한다면 → 1:1 관계
    • 부모로부터 받은 속성을 포함하여 다른 부모 엔터티에서 받은 속성을 포함하거나 스스로 가지고 있는 속성과 함계 주식별자로 구성되는 경우 → 1:M 관계

비식별자 관계

부모로부터 속성을 받았지만 자식 엔터티의 주식별자로 사용하지 않고 일반적인 속성으로만 사용하는 경우

  • 비식별자 관계에 의한 외부 속성을 생성한다.
    1. 자식 엔터티에서 받은 속성이 반드시 필수가 아니더라도 무방하기 때문에 부모 없는 자식이 생성될 수 있는 경우
    2. 엔터티 별로 데이터의 생명 주기를 다르게 관리할 경우
      예를 들어, 부모 엔터티에 인스턴스가 자식의 엔터티와 관계를 가지고 있었지만 자식만 남겨두고 먼저 소멸될 수 있는 경우
    3. 여러 개의 엔터티가 하나의 엔터티로 통합되어 표현되었는데 각각의 엔터티가 별도의 관계를 가질 때
    ![](https://velog.velcdn.com/images%2Fyeomss%2Fpost%2Fa09a05af-0e62-410d-852e-fa0d45863149%2FUntitled%205.png)
    
    - 통합된 엔터티에 각각의 엔터티가 별도의 관계를 가지고 있고 각각의 관계로부터 받은 주식별자를 접수 엔터티의 주식별자로 사용할 수 없는 모습을 보여준다.
4. 자식 엔터티에 주식별자로 사용하여도 되지만 자식 엔터티에서 `별도의 주식별자를 생성하는 것이 더 유리하다고 판단될 때` 비식별자 관계에 의한 외부 식별자로 표현한다.
    
    ![](https://velog.velcdn.com/images%2Fyeomss%2Fpost%2F5b478c2e-66d8-46ff-b2be-85c1c0b51ef5%2FUntitled%206.png)
    

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

  • 식별자 관계와 비식별자 관계에 대한 설정을 고려하지 않으면 → 개발의 복잡성을 증가
  • 식별자 관계만으로 연결된 데이터 모델의 특징은 주식별자 속성이 지속적으로 증가할 수 밖에 없는 구조로서 개발자 복잡성오류 가능성을 유발시킬 수 있는 요인이 될 수 있다.

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

  • 일반적으로 각각의 엔터티에는 중요한 기준 속성이 있는데 이러한 기준 속성은 부모 엔터티에 있는 PK 속성으로부터 상속되어 자식 엔터티에 존재하는 경우가 많다.
  • 만약 비식별자 관계로만 설정할 경우 → 자식 엔터티에 상속이 되지 않아 자식 엔터티를 처리할 때 쓸데 없이 부모 엔터티까지 찾아가야 하는 경우가 발생한다.

식별자관계와 비식별자관계 모델링

  1. 비식별자 관계 선택 프로세스
    • 식별자 관계에서 비식별자 관계를 파악하는 기술이 필요하다.
    • 합리적으로 비식별자 관계를 정리할 수 있는 흐름
      • 기본적으로 식별자 관계로 모든 관계가 연결되면서 다음 조건에 해당할 경우 비식별자 관계로 조정하면 된다.
      • 여기서 중요한 요인은 자식 엔터티의 독립된 주식별자 구성이 필요한지를 분석하는 부분
      • 독립적으로 주식별자를 구성한다는 의미 → 업무적 필요성과 성능상 필요여부를 모두 포함
  2. 식별자와 비식별자 관계 비교
항목식별자 관계비식별자 관계
목적강한 연결 관계 표현약한 연결관계 표현
자식 주식별자 영향자식 주식별자의 구성에 포함됨자식 일반 속성에 포함됨
표기법실선 표현점선 표현
연결 고려사항반드시 부모 엔터티 종속, 자식 주식별자 구성에 부모 주식별자 포함, 상속받은 주식별자 속성을 타 엔터티에 이전 필요약한 종속 관계, 자식 주식별자 구성을 독립적으로 구성, 자식 주식별자 구성에 부모 주식별자 부분 필요, 상속받은 주식별자 속성을 타 엔터티에 차단 필요, 부모 쪽의 관계 참여가 선택 관계
  1. 식별자와 비식별자를 적용한 데이터 모델
    • 식별자와 비식별자 관계를 적절하게 선택하면 데이터 모델의 균형감을 갖출 수 있다.

0개의 댓글