카테고리 없음

[Database] 복합키와 식별/비식별 관계 매핑

hi_dev 2024. 7. 17. 23:13

최근에 회사에서 여러 외부업체 백엔드 컨설팅을 해주면서 여러 서비스의 DB ERD 설계를 하게되었는데, 그 과정에서 그동안 대충 공부하고 넘겼는데 정말 많이 쓰이는 개념들에 대해 다시 한 번 제대로 정리해보려고 한다.


식별 관계(Identifying) vs 비식별 관계(Non-Identifying)

데이터베이스 테이블 사이에 관계는 외래 키가 기본 키에 포함되는지에 따라 비식별 관계 식별 관계로 나뉜다.

 

식별 관계(Identifying)

  • 부모 테이블의 기본키가 자식 테이블의 외래키이면서 동시에 기본키가 되는 관계
  • 자식 테이블이 부모 테이블의 존재 여부에 의존적이다
  • 실선으로 표기한다

비식별 관계(Non-identifying)

  • 부모 테이블의 기본키가 자식 테이블의 (비기본키 영역에서) 외래키로만 사용되는 관계
  • 두 테이블은 서로 의존성이 없다. 자식 테이블은 부모 테이블의 존재 여부와 관계없이 존재한다.
  • 점선으로 표기한다


비식별관계는 또 다시 필수적 비식별 관계와 선택적 비식별 관계가 있다.

 

필수적 비식별 관계(Mandatory)

외래키에 NULL을 허용하지 않고, 연관관계를 필수적으로 맺어야 한다.

 

선택적 비식별 관계(Optional)

외래키에 NULL을 허용하고, 연관관계를 맺을지 말지 선택할 수 있다.


복합키(Composite Key)

복합키는 2개 이상의 칼럼을 묶어서 하나의 기본키로 지정하는 것을 의미한다.
복합키 역시 기본키이기 때문에 유일성과 최소성을 만족해야한다.

복합키와 식별관계

 

식별관계 매핑으로 복합키를 사용하는 경우의 구조이다.

PARENT 테이블의 기본키를 CHILD 테이블에서 기본키+외래키로 사용하고, CHILK 테이블의 복합키는 GRANDCHILD 테이블의 기본키+외래키이자 복합키로 사용한다.

 

복합키와 비식별관계

비식별관계 매핑에서의 복합키 사용은 위와 같은 구조가 된다.