치춘짱베리굿나이스
Identifying / Non-Identifying Relationship 본문
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-에-대하여
'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 |