SQL-식별자

박현·2022년 8월 25일
2

SQL

목록 보기
5/34
post-custom-banner

식별자(Identifier) 개념

  • 하나의 엔터티에 구성된 여러 개의 속성중에 엔터티를 대표할 수 있는 속성
  • 하나의 엔터티는 반드시 하나의 유일한 식별자가 존재해야 한다.
  • 식별자는 업무적으로 구분되는 정보로 생각할 수 있으므로 논리 데이터 모델링 단계에서 사용
  • 키는 데이터베이스 테이블에 접근을 위한 매개체로서 물리 데이터 모델링 단계에서 사용

식별자의 특징

  • 주식별자인지 아니면 외부식별자인지 등에 따라 특성이 다소 차이가 있다.
  • 주식별자의 특징
    • 주식별자에 의해 엔터티 내에 모든 인스턴스들이 유일하게 구분되어야 한다. (유일성)
    • 주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수가 되어야 한다. (최소성)
    • 지정된 주식별자의 값은 자주 변하지 않는 것이어야 한다.(불변성)
    • 주식별자가 지정이 되면 반드시 값이 들어와야 한다. (존재성)

  • 대체식별자의 특징
    • 주식별자의 특징과 일치
  • 외부식별자의 특징
    • 주식별자의 특징과 일치하지 않으며 참조무결성 제약조건에 따른 특징을 가지고 있다.
  • 참조무결성
    : 외래키 값은 NULL이거나 참조하는 릴레이션의 기본키 값과 동일해야 한다.
    즉, 각 릴레이션은 참조할 수 없는 외래키 값을 가질 수 없다.

  • 릴레이션
    : 데이터의 집합 즉, 행과 열로 구성된 테이블

  • 외래키
    : 관계형 데이터베이스에서 외래 키는 한 테이블의 필드 중 다른 테이블의 행을 식별할 수 있는 키


식별자 분류 및 표기법

1. 식별자 분류

  • 자신의 엔터티 내에서 대표성을 가지는가 (대표성여부)
    • 주식별자
    • 보조식별자
  • 엔터티내에서 스스로 생성되었는가 (스스로 생성여부)
    • 내부식별자
    • 외부식별자
  • 단일 속성으로 식별이 되는가 (단일속성여부)
    • 단일식별자
    • 복합식별자
  • 대체여부
    • 본질식별자
    • 인조식별자

아래의 표를 참고하면 분류체계를 좀 더 상세하게 볼 수있다.

2. 식별자 표기법

  • 데이터 모델에서 표현하면 아래의 사진과 같이 분류하여 설명할 수있다.

주식별자 도출기준

데이터 모델링 작업에서 중요한 작업 중의 하나가 주식별자 도출작업이다.

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

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

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

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

관계와 속성을 정의하고 주식별자를 정의하면 논리적인 관계에 의해 자연스럽게 외부식별자가 도출되지만 중요하게 고려할 사항이 있다.

  • 엔터티에 주식별자가 지정되고 엔터티간 관계를 연결하면 부모쪽의 주식별자를 자식엔터티의 속성으로 내려보내지는데 이때 자식엔터티에서 부모엔터티로부터 받은 외부식별자를 자신의 주식별자로 이용할 것인지 또는 부모의 연결이 되는 속성으로만 이용할 것인지를 결정해야 한다.
  • 즉 엔터티 사이 관계유형은 업무특징, 자식엔터티의 주식별자구성, SQL전략에 의해 결정된다.

2. 식별자관계

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

3. 비식별자관계

  • 부모엔터티로부터 속성을 받았지만 자식엔터티의 주식별자로 사용하지 않고 일반적인 속성으로만 사용하는 경우를 비식별자관계라고 한다.

다음의 네 가지 경우에 비식별자 관계에 의한 외부속성을 생성한다.

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

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

  • 식별자 관계로만 연결된 데이터 모델의 특징은 주식별자 속성이 지속적으로 증가할 수밖에 없는 구조로서 개발복잡성과 오류를 유발하는 요인이 될 수 있다는 사실을 기억해야 한다.

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

  • 데이토 모델링을 전개할 때 각 엔터티 간의 관계를 비식별자관계로 설정하면 속성이 자식엔터티로 상속되지 않아 자식엔터티에서 데이터를 처리할 때 쓸데없이 부모엔터티까지 찾아가야 하는 경우가 발생한다.
    즉, 비식별자 관계로만 데이터 모델링을 전개하다 보면 SQL구문에 많은 조인이 걸리게 되고 그에 따라 복잡성이 증가하고 성능이 저하되게 되는 것이다.

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

1) 비식별자관계 선택 프로세스
다음 흐름에 따라 비식별자관계를 선정한다면 합리적으로 관계를 설정하는 모습이 될 수있다. 기본적으로 식별자 관계로 모든 관계가 연결되면서 다음 조건에 해당할 경우 비식별자관계로 조정하면 된다.

여기서 가장 중요한 요인은 자식엔터티의 독립된 주식별자 구성이 필요한지를 분석하는 부분이다. 독립적으로 주식별자를 구성한다는 의미는 업무적 필요성과 성능상 필요여부를 모두 포함하는 의미로 이해하면 된다.

2) 식별자와 비식별자관계 비교
강한 관계인 식별자관계와 약한 관계인 비식별자관계를 비교하면 아래사진과 같이 나타낼 수 있다.

3) 식별자와 비식별자를 적용한 데이터 모델
이러한 기준에 의해 식별자와 비식별자 관계가 적절하게 설정된 데이터 모델은 아래 사진의 사례와 같이 균형감 있게 나타난다.

상기 모델은 업무의 특성에 따라 식별자관계와 비식별자관계를 적절하게 선택함으로써 데이터모델의 균형감을 갖추었다고 볼 수 있다.


참고자료: SQL전문가가이드, DATA-ON-AIR

post-custom-banner

0개의 댓글