2025-08-11 03:46

Tags:

데이터베이스 관계의 핵심, 식별자 vs 비식별자 완벽 정복 핸드북

① 식별자 관계

  • 정의: 자식 테이블이 부모 테이블의 주식별자를 자신의 주식별자로 포함시키는 관계.

  • 특징:

    • 부모 테이블의 주식별자를 자식 테이블이 상속받음.

    • 반드시 부모 엔터티가 생성되어야 자식 엔터티가 생성될 수 있음.

    • SQL 문의 조인 관계를 최소화해야 하는 경우: 이 때 자식 엔터티를 공유된 부모 엔터티를 ‘Strong Entity’, 공유 받은 자식 엔터티를 ‘Weak Entity’ (부모 없이 존재할 수 없어서)라고 함.

② 비식별자 관계

  • 정의: 부모의 주식별자가 자식 엔터티의 비식별자 속성으로 상속되는 관계.

  • 특징:

    • 부모 엔터티 없이 자식 엔터티의 생성이 가능.

    • 자식 엔터티의 주식별자로 사용해도 되나, 일반 속성으로 두는 게 유리한 경우.

      • 부모와 자식 엔터티 간의 관계가 약한 경우.

      • 자식 엔터티의 독립적인 주식별자 설정이 필요한 경우.

      • 부모 엔터티의 인스턴스가 자식 엔터티의 인스턴스보다 먼저 소멸되는 경우.

      • PK 속성의 단순화가 필요한 경우. (SQL 복잡도 증가로 인해 개발 생산성이 저하되는 현상 방지)


주식별자 도출기준

  • 해당 업무에서 자주 이용되는 속성, 자주 변하지 않는 값.

  • 명칭, 내역 등과 같이 이름으로 기술되는 것들은 가능한 한 지양.

  • 복합으로 주식별자를 구성할 경우, 너무 많은 속성은 포함하지 않음.


식별자 vs 비식별자 관계 비교

항목식별자 관계 (강한 연결 관계 표현)비식별자 관계 (약한 연결 관계 표현)
목적강한 연결관계 표현약한 연결관계 표현
자식 주식별자 영향자식 주식별자 구성에 포함일반 속성에 포함
표기법실선점선
고려사항
  • 반드시 부모테이블에 종속
  • 자식 주식별자 구성에 부모 주식별자 포함 필요
  • 종속적인 관계의 표현이 중요
  • 약한 종속관계
  • 자식 주식별자를 독립적으로 구성
  • 자식테이블 단독 생성 가능
  • 부모-자식 관계의 단절이 필요

일반적으로는 비식별자 관계를 사용함.

들어가는 말: 왜 관계 설정이 중요한가?

데이터베이스를 거대한 도서관이라고 상상해 봅시다. 각 테이블은 ‘책장’이고, 그 안의 데이터는 ‘책’입니다. 이때, ‘관계’는 특정 책장에서 다른 책장으로 이어지는 ‘연결 통로’와 같습니다. 이 연결 통로를 어떻게 설계하느냐에 따라 도서관의 효율성과 확장성이 결정됩니다.

식별자와 비식별자 관계는 이 연결 통로를 만드는 두 가지 핵심 방식입니다. 하나는 두 책장을 단단히 용접하는 것과 같고, 다른 하나는 필요할 때만 연결하는 볼트와 너트 방식과 같습니다. 어떤 방식을 선택하느냐가 데이터 구조의 운명을 결정합니다.

1. 관계를 이해하기 전, ‘키(Key)’ 다시 보기

관계 설정을 이해하려면 먼저 **기본 키(Primary Key)**의 개념을 알아야 합니다.

  • 기본 키(Primary Key): 테이블의 수많은 데이터(행) 중에서 특정 데이터 하나를 유일하게 식별할 수 있는 ‘주민등록번호’ 같은 존재. 이 기본 키가 다른 테이블로 넘어가 관계의 기반이 됨.

2. 식별자(Identifying) 관계: 떼려야 뗄 수 없는 운명 공동체

식별자 관계는 부모 테이블의 기본 키를 자식 테이블이 물려받아 자신의 기본 키 일부로 삼는 강력한 관계입니다.

  • 핵심 개념: 부모 없이는 자식이 존재할 수 없음 (Parent-Child Dependency).

  • 비유: ‘신용카드’(부모)와 ‘카드 사용 내역’(자식)의 관계와 같음. 카드 사용 내역은 어떤 신용카드의 내역인지가 명확해야만 존재 의미가 있음. 따라서 ‘카드 번호’(부모 기본 키)는 ‘카드 사용 내역’을 식별하는 핵심 정보(자식 기본 키의 일부)가 됨.

  • ERD 표기: 실선 (Solid Line)으로 표현.

언제 사용하는가?

  • 자식 개체가 부모 개체에 전적으로 종속될 때.

  • 두 테이블이 항상 함께 조회되어 조인(JOIN) 성능을 최적화해야 할 때.

3. 비식별자(Non-identifying) 관계: 필요할 때 참고하는 독립적 관계

비식별자 관계는 부모 테이블의 기본 키를 자식 테이블이 물려받되, 자신의 일반 속성(Foreign Key)으로만 사용하는 유연한 관계입니다.

  • 핵심 개념: 부모와 자식이 독립적으로 존재 가능.

  • 비유: ‘교수님’(부모)과 ‘학생’(자식)의 관계와 같음. 학생은 지도교수가 없어도 독립적인 ‘학생’으로 존재할 수 있음. 학생은 고유한 ‘학번’(자식 기본 키)을 가지며, ‘지도교수 번호’(부모 기본 키)는 필요할 때 참고하는 추가 정보일 뿐임.

  • ERD 표기: 점선 (Dashed Line)으로 표현.

언제 사용하는가?

  • 두 테이블의 관계가 느슨하거나 선택적일 때.

  • 자식 테이블이 독립적인 생명주기를 가질 때.

  • 모델링을 유연하고 단순하게 유지하고 싶을 때. (실무에서 대부분 이 방식을 선호)

4. 한눈에 비교하기: 식별자 vs 비식별자

구분식별자 관계 (강한 연결)비식별자 관계 (약한 연결)
목적강한 종속 관계 표현약한 참조 관계 표현
키 상속부모의 기본 키가 자식의 기본 키가 됨부모의 기본 키가 자식의 일반 속성이 됨
생존 의존성부모가 있어야 자식이 존재 가능부모 없이 자식 단독 존재 가능
표기법실선점선
주 사용처필수적인 포함 관계 (ex: 주문-주문항목)선택적인 참조 관계 (ex: 부서-사원)

결론: 어떤 관계를 선택해야 할까?

정답은 없습니다. 데이터의 논리적 의미에 따라 달라집니다. 하지만 일반적인 원칙은 다음과 같습니다.

“기본은 비식별자 관계로, 꼭 필요한 경우에만 식별자 관계를 사용하라.”

비식별자 관계는 모델을 더 유연하고 확장 가능하게 만들어 줍니다. 식별자 관계는 부모 키가 자식 테이블로 계속 전이되면서 기본 키가 복잡해지고, 수정이 어려워지는 단점이 있기 때문입니다.

이 핸드북을 통해 데이터 모델의 논리적 관계를 어떻게 물리적으로 구현할지 결정하는 데 도움이 되셨기를 바랍니다.

여러분이 설계하려는 데이터 모델에서는 어떤 관계가 더 적합할지, 그리고 그 이유는 무엇인지 고민해보셨나요?

References

식별자