치춘짱베리굿나이스

Identifying / Non-Identifying Relationship 본문

ServerSide/Database

Identifying / Non-Identifying Relationship

치춘 2022. 9. 27. 15:01

Identifying / Non-Identifying Relationship

ERDCloud에서 테이블 연결을 그리다 보면 대문짝만하게 Identifying Relationship, Non-Identifying Relationship 중 고르라고 한다 (살짝 당황함)

무엇인지 알아보자

서론

부모 테이블 (엔터티) / 자식 테이블 (엔터티)

1 : n 관계를 그린다고 할 때,

  • 1에 해당하는 (좌측) 테이블 또는 엔터티를 부모 테이블 (부모 엔터티) 이라고 한다
  • n에 해당하는 (우측) 테이블 또는 엔터티를 자식 테이블 (자식 엔터티) 이라고 한다

I/E 표기법에서

I/E 표기법에선 점선도 사용할 수 있다

좌측 엔터티 (또는 테이블) 가 없어도 우측 엔터티가 존재할 수 있다는 의미이다

위의 예시에서는,

첫 번째 연결에 의하면 교수가 없어도 대학원생 엔터티는 존재할 수 있다
두 번째 연결에 의하면 교수 없이는 대학원생 엔터티도 존재할 수 없다

앞선 게시글에서 I/E 표기법을 정리하면서 위와 같은 내용을 작성했었다

요지는

  • 점선으로 연결된 관계에서는 앞 엔터티 (교수) 가 존재하지 않아도 뒤 엔터티 (대학원생) 가 존재할 수 있다
  • 실선으로 연결된 관계에서는 앞 엔터티 (교수) 없이는 뒤 엔터티 (대학원생) 가 존재할 수 없다

였다

이 사실을 기억하며 Identifying / Non-Identifying relationship이 무엇인지 보도록 하자

Identifying Relationship

식별관계

쉽게 말하면, 위의 예시에서 대학원생 레코드는 교수 레코드 없이는 존재할 수 없다

테이블에서의 특징으로

  • 자식 테이블 (대학원생) 은 부모 테이블 (교수) 의 기본 키 (Primary Key) 칼럼 값을 외래 키 (Foreign Key) 로 사용한다
  • 이때 이 외래 키 또한 자식 테이블의 또다른 기본 키로 사용된다
  • 부모 테이블의 기본 키를 자식 테이블에서도 기본 키로 사용하므로, 부모 테이블의 레코드가 존재하지 않으면 자식 테이블 또한 존재할 수 없다 (종속되었다)

ERD에서는 실선으로 표현된다

ERDCloud 상에서는 자식 테이블에 추가된 FK가 PK와 같은 바탕색으로 표현되며, 기본 키라는 것을 알려준다

일상생활에서의 예시로는

  • 구매자가 존재하지 않을 경우 구매 내역도 존재할 수 없다
  • 학생이 존재하지 않을 경우 제출 과제 또한 존재할 수 없다

등등이 있겠다

Non-Identifying Relationship

비식별관계

이 관계에서 대학원생은 굳이 교수가 없어도 존재할 수 있다

테이블에서의 특징으로

  • 자식 테이블 (대학원생) 은 부모 테이블 (교수) 의 기본 키 컬럼 값을 외래 키로 사용하지만, 식별관계와 다르게 기본 키로서는 작동하지 않는다
  • 단순 외래 키로만 사용하므로, 딱히 부모 테이블의 레코드가 존재하지 않아도 상관 없다 (독립적이다)

ERD에서는 점선으로 표현된다

ERDCloud에서는 자식 테이블에 추가된 FK가 일반 컬럼과 같은 바탕색으로 표현된다

일상생활에서의 예시로는

  • 세입자가 존재하지 않아도 건물이나 방은 존재할 수 있다
  • 환자가 굳이 없어도 병원 자체는 존재할 수 있다

등등이 있다

여담

식별관계 / 비식별관계는 ERD를 그릴 때에만 유효하고, 실제 데이터베이스 상에서는 따로 특별히 구현하지는 않는 추상적인 개념이라고 한다

그도 그럴 것이 FK는 중복될 수 있지만 PK는 중복이 될 수 없으니…

PK는 테이블당 단 하나만 존재해야 하고 FK는 PK가 될 수 없는 줄 알았는데 ERD 상에서는 규칙이 조금 다르게 적용되나보다

ERDCloud로 ERD 작성만 하려고 했는데 점점 정리해야할 게 늘어나는 기분이다 🥹


참고자료

https://jins-dev.tistory.com/entry/RDBMS의-관계-Identifying-NonIdentifying-Relationship-에-대하여

https://stackoverflow.com/questions/762937/whats-the-difference-between-identifying-and-non-identifying-relationships

https://velog.io/@jch9537/DATABASE-식별과-비식별-관계

'ServerSide > Database' 카테고리의 다른 글

MySQL Workbench 사용해보기  (0) 2022.09.28
ERD 그려보기 with ERDCloud  (0) 2022.09.27
ERD  (0) 2022.09.27
MySQL (Express와 함께)  (0) 2022.09.14
DBMS  (0) 2022.09.10
Comments