Earn this, Earn it.
TIL - 식별관계와 비식별관계 본문
데이터 모델링을 하며 ERD(Entity Relationship Diagram, 개체관계도)에 테이블을 만들면서 식별관계, 비식별관계를 구별하는 것에 대해 어려움을 겪어서 이 포스팅을 쓰게 되었다.
그 전에 기본키(Primary Key, PK)와 외래키(Foreign Key, FK)에 대해 알아보자
기본키
기본키는 테이블에서 각 행의 정보들을 식별할 수 있는 정보를 표현한다. 즉 물품 테이블에서 물품번호를 예로 들 수 있다. 이는 여러 정보들 중 행을 식별할 수 있어야 하기 때문에 비어있으면 안되고(Not Null, NN) 중복되어서도 안된다(Unique). 그리고 정보가 최대한 간단할수록 좋다
외래키
외래키는 참조하는 테이블과 참조되는 테이블의 관계를 나타낸다. 물품과 채팅방의 갯수는 1:N의 관계를 가질 수 있으며 이 각각의 테이블을 참조하여 만들어진다. 여기서 채팅방은 물품의 물품번호를 외래키로 갖는다. 이는 다른 테이블의 정보를 참조하기 위함이다.
식별관계와 비식별관계
그렇다면 식별관계와 비식별관계는 무엇일까?
내가 진행하고 있는 프로젝트의 물품 테이블, 유저 테이블, 관심목록 테이블을 예로 들어보자.
식별관계 (Identifying Relationship)
식별관계에 대해 정리를 해보자면
- 부모테이블(물품, 유저 테이블) 기본키(PK)가 자식 테이블(관심목록 테이블)의 외래키이자 기본키로 사용되는 관계이다.
- 자식 테이블의 행(정보)를 추가할 때 부모테이블의 참조 행(물품번호 또는 유저이름)이 없다면 자식테이블의 행을 추가 할 수 없다.
: 관심목록 테이블은 물품번호와 유저이름 중 하나라도 없다면 기본키를 만들 수 없게 되고(두개의 외래키가 합쳐 기본키가 되므로) 기본키가 없어 정보를 식별할 수 없으므로 데이터를 넣을 수 없다.
: 예를 들면 게시판의 작성글과 댓글의 관계를 식별관계라고 할 수 있다.(작성글이 없다면 댓글도 없다)
로 볼 수 있으며 식별관계는 실선으로 나타내 준다.
비식별관계 (Non Identifying Relationship)
비식별관계는 부모 테이블을 참조한 테이블에서 참조된 외래키가 기본키가 아닌 일반속성(컬럼)으로 참조되었을 때를 말한다.
위의 예시에서 관심목록 테이블에 정보를 식별할 수 있는 기본키(관심목록 번호)를 추가하면 관심목록 번호로 관심목록 테이블의 정보들을 식별할 수 있게 되고 외래키(상품번호와 주문번호)는 테이블의 일반속성이 된다.
비식별관계에 대해 정리하면
- 부모 테이블(상품, 주문테이블) 기본키가 자식 테이블(주문_상품테이블)의 일반컬럼이나 외래키(Foreign Key) 컬럼에 저장되는 관계이다.
- 자식 테이블의 행(정보)를 추가할 때 부모테이블의 참조 행(상품번호 또는 주문번호)이 없어도 자식테이블의 행을 추가 할 수가 있다.
: 예를 들면 회사의 부서와 사원의 관계를 비식별관계라고 할 수 있다. (사원이 부서가 배정되지 않을 수도 있으므로)
로 정리될 수 있으며 비식별관계는 점선으로 표시한다.
회고
여기까지 식별관계와 비식별관계를 알아보았다. 평소 DB쪽을 잘 공부하지 않아서 식별관계와 비식별관계를 구분하지 않고 사용하고 있었는데 이번 기회에 DB에 적용해볼 생각이다. 그건 그렇고 생각보다 데이터 모델링은 복잡한 것이다 라는 것을 느꼈다. 단순히 생각해서 ERD를 그렸었는데 계속 수정을 반복하게 된다... 고려해야할 점이 많은 것 같다.
참조
'[개발 공부]' 카테고리의 다른 글
TIL - 데이터베이스와 인덱스 (0) | 2021.10.30 |
---|---|
TIL - React 함수형과 훅(hooks)에 대해서 (0) | 2021.10.11 |
TIL - 내멋대로 정리하는 this, bind, apply, call (0) | 2021.09.24 |
디자인 패턴에 대해서 - 2) 옵저버(Observer) 패턴 (0) | 2021.09.23 |
디자인 패턴에 대해서 - 1) 디자인 패턴의 개요 (0) | 2021.09.23 |