[ SQLD : I. 데이터 모델링의 이해] 1-5. 식별자(Identifiers)

문지은·2023년 5월 31일
0

SQLD

목록 보기
5/30
post-thumbnail

식별자(Identifiers)

식별자의 개념

  • 하나의 엔터티에 구성되어 있는 여러 개의 속성 중에 엔터티를 대표할 수 있는 속성을 의미
  • 하나의 엔터티는 반드시 하나의 유일한 식별자가 존재해야 함
  • 업무적으로 구분이 되는 정보 -> 논리 데이터 모델링 단계에서 사용

식별자의 특징

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

식별자 분류 및 표기법

식별자 분류

대표성 여부

  • 주식별자 : 엔터티 내에서 각 어커런스를 구분할 수 있는 구분자이며, 타 엔터티와 참조관계를 연결할 수 있는 식별자
  • 보조식별자 : 엔터티 내에서 각 어커런스를 구분할 수 있는 구분자이나 대표성을 가지지 못해 참조관계 연결을 못함

스스로 생성 여부

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

속성의 수

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

대체 여부

  • 본질식별자 : 업무에 의해 만들어지는 식별자
  • 인조식별자 : 업무적으로 만들어지지는 않지만 원조식별자가 복잡한 구성을 가지고 있기 때문에 인위적으로 만든 식별자

식별자 표기법

주식별자 도출기준

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

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

외부 식별자(Foreign Identifier)

  • 자기 자신의 엔터티에서 필요한 속성이 아니라 다른 엔터티와의 관계를 통해 자식 쪽에 엔터티에 생성되는 속성
  • 데이터베이스 생성 시에 Foreign Key 역할을 함

식별자 관계(Identifying Relationship)

  • 자식엔터티의 주식별자로 부모의 주식별자가 상속이 되는 경우
  • Null값이 오면 안되므로 반드시 부모엔터티가 생성되어야 자기 자신의 엔터티가 생성됨

비식별자 관계(Non-Identifying Relationship)

  • 부모엔터티로부터 속성을 받았지만 자식엔터티의 주식별자로 사용하지 않고 일반적인 속성으로만 사용하는 경우
  • 비식별자 관계에 의한 외부속성을 생성하는 경우 4가지
    • 자식엔터티에서 받은 속성이 반드시 필수가 아니어도 무방하기 때문에 부모 없는 자식이 생성될 수 있는 경우
    • 엔터티별로 데이터의 생명주기(Life Cycle)를 다르게 관리할 경우
      • 부모엔터티에 인스턴스가 자식의 엔터티와 관계를 가지고 있었지만 자식만 남겨두고 먼저 소멸될 수 있는 경우
    • 여러 개의 엔터티가 하나의 엔터티로 통합되어 표현되었는데 각각의 엔터티가 별도의 관계를 가질 경우
    • 자식엔터티에 주식별자로 사용하여도 되지만 자식엔터티에서 별도의 주식별자를 생성 하는 것이 더 유리하다고 판단될 경우

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

  • 식별자 관계만으로 연결된 데이터 모델의 특징은 주식별자 속성이 지속적으로 증가할 수 밖에 없는 구조
  • 개발자 복잡성과 오류가능성을 유발시킬 수 있는 요인이 될 수 있음

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

  • 일반적으로 각각의 엔터티에는 중요한 기준 속성이 있는데 이러한 기준속성은 부모엔터 티에 있는 PK속성으로부터 상속되어 자식엔터티에 존재하는 경우가 많음
  • 데이터 모델링을 전개할 때 각 엔터티 간의 관계를 비식별자 관계로 설정하면 이런 유형의 속성이 자식엔터티로 상속이 되지 않아 자식엔터티에서 데이터를 처리할 때 쓸데없이 부모엔터티까지 찾아가야 하는 경우가 발생
  • 불필요한 조인이 다량으로 유발되면서 SQL구문도 길어지고 성능이 저하되는 현상이 발생

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

비식별자 관계 선택 프로세스

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

식별자와 비식별자를 적용한 데이터 모델

profile
코드로 꿈을 펼치는 개발자의 이야기, 노력과 열정이 가득한 곳 🌈

0개의 댓글