본문 바로가기
SQLD

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

by Hyeon_ 2024. 3. 3.

식별자(Identifiers)란?

식별자를 알기 전에 우린 엔티티(Entity)에 대해 먼저 알아야 한다. 엔티티란, 인스턴스의 집합으 의미하는 것으로, 여러 개의 집합체를 담고 있는 하나의 상자에서 각각을 구분할 수 있는 논리적인 이름이 있어야 한다. 이때, 구분할 수 있는 이름을 '식별자'라고 한다. 식별자란 하나의 엔티티에 구성된 여러 개의 속성 중에 엔티티를 대표할 수 있는 속성을 의미한다. 또한 이 하나의 엔티티는 반드시 하나의 유일한 식별자가 존재해야 한다.
식별자와 키(Key)를 동일하게 생각하는 경우가 많지만 식별자라는 용어는 업무적으로 구분이 되는 정보로 생각이 가능해 논리 데이터 모델링 단계에서 사용하고 키는 데이터베이스 테이블에 접근을 위한 매개체로서 물리 데이터 모델링 단계에서 사용한다.

식별자의 종류

분류 식별자 설명
대표성 여부 주 식별자 엔티티 내에서 각 어커런스를 구분할 수 있는 구분자이며, 타 엔티티와 참조관계를 연결할 수 있는 식별자
보조 식별자 엔티티 내에서 각 어커런스를 구분할 수 있는 구분자이나 대표성을 가지지 못해 참조관계 연결을 못함
스스로 생성 여부 내부 식별자 엔티티 내부에서 스스로 만들어지는 식별자
외부 식별자 타 엔티티와의 관계를 통해 타 엔티티로부터 받아오는 식별자
속성의 수 단일 식별자 하나의 속성으로 구성된 식별자
복합 식별자 둘 이상의 속성으로 구성된 식별자
대체 여부 본질 식별자 업무에 의해 만들어지는 식별자
인조 식별자 업무적으로 만들어지지는 않지만 원조 식별자가 복잡한 구성을 가지고 있기 때문에 인위적으로 만든 식별자

주식별자의 특징

  • 유일성: 주식별자에 의해 엔티티 내에 모든 인스턴스들을 유일하게 구분
  • 최소성: 주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수가 되어야 함
  • 불변성: 주식별자가 한 번 특정 엔티티에 지정되면 그 식별자의 값은 변하지 않아야 함
  • 존재성: 주식별자가 지정되면 반드시 데이터 값이 존재(NULL 허용X)

식별 관계

우리는 식별자와 그의 종류, 특징에 대해 알아봤다. 그렇다면 식별 관계란 무엇일까?
식별 관계란, 부모 테이블의 기본키 또는 유니크 키를 자식 테이블이 자신의 기본키로 사용하는 관계를 말한다. 부모테이블의 키가 자신의 기본키에 포함되기 때문에 반드시 부모 테이블에 데이터가 있어야 자식 테이블에 데이터를 입력할 수 있다. 즉, 부모 데이터가 없다면 자식 데이터는 생길 수 없다는 것을 말한다.

자동차와 바퀴를 생각해보자.

자식 테이블에 데이터가 존재하면 부모 데이터가 반드시 존재하는 상태가 된다. 자식 테이블인 바퀴는 부모 테이블인 차 테이블에 데이터가 존재해야 생성이 가능하다. 즉, 부모 테이블에 자식 테이블이 종속된다.

 

비식별 관계

비식별 관계란 부모 테이블의 기본키 또는 유니크 키를 자신의 기본키로 사용하지 않고, 외래키로 사용하는 관계를 말한다. 자식 데이터는 부모 데이터가 없어도 독립적으로 생성이 가능하다. 부모와의 의존성을 줄일 수 있기 때문에 조금 더 자유로운 데이터 생성과 수정이 가능하다.

 

각각의 방법을 사용하는 이유?

하나의 방법으로 통일을 해서 사용한다면 좋겠지만 두 방식에는 차이가 존재한다.

식별관계는 자식 데이터를 넣기 전, 부모 테이블에 데이터가 필수적으로 존재해야 한다. 또한 기본키를 여러 복합 자연키로 처리하기 때문에 입력할 수 있는 데이터에 제한을 둘 수 있다. 요구사항이 변하지 않을 경우 강력한 데이터 정합성을 보장할 수 있다는 것이다. 하지만, 반대로 생각해보면 요구사항이 변경된다면 우리의 발목을 잡을 수 있는 조건이 되기도 한다. 

그렇다면 상황별로 어떤 것을 사용해야 하는지에 대해 알아보자. 

 

식별관계와 비식별 관계의 장단점

식별관계의 장점

  • 데이터의 정합성 유지를 DB에서 할 수 있다.
  • 자식 테이블에 데이터가 존재한다면 부모 데이터도 반드시 존재한다고 보장할 수 있다.

식별관계의 단점

  • 요구사항이 변경되었을 경우 구조 변경이 어렵다.

비식별관계의 장점

  • 변경되는 요구사항을 유동적으로 수용할 수 있다.
  • 부모 데이터와 독립적인 자식 데이터를 생성할 수 있다.

비식별관계의 단점

  • 데이터 정합성을 지키기 위해 별도의 비즈니스 로직이 필요하다.
  • 자식 데이터가 존재해도 부모 데이터가 존재하지 않을 수 있다. (데이터 무결성 보장 X)