[SSAFY 공통프로젝트] 다대다(M:N) 테이블 설계

BAEJUN SON·2024년 7월 16일

프로젝트 ERD 설계 도중 M:N(다대다) 관계를 표현해야 했는데, 다대다 관계를 ERD에서 어떻게 표현하는지 이번에 처음 알아서 기록하려 한다.


이슈 사항

다음 두 테이블은 서로를 M:N관계로 참조해야 한다.

  • child(자녀)테이블은 여러개의 아이템을 가질 수 있다.
  • item(아이템) 테이블도 마찬가지로 여러 자녀 정보를 가져야 한다.

해당 상황에서 M:N관계를 논리적으로는 표현할 수 있지만 2개의 테이블만으로 구현해내는 것은 불가하기 때문에 소지 여부를 위한 테이블이 별도로 필요하다. 쉽게 말해서, 해당 자녀가 해당 아이템을 가지고 있는가?라는 "소지"에 대한 정보를 담는 테이블이 있어야 한다는 것이다.

이 이슈를 해결하기 위해선, 오롯이 "소지"에 대한 정보를 담고 있는 테이블이 하나 더 필요하다.
이를 매핑 테이블이라 한다.

  • M:N관계를 구현하기 위해선 각 테이블의 PK를 참조해 FK로 들고 있는 테이블을 생성 해야 한다.
  • 통상 연결테이블(매핑테이블)이라 칭한다.
  • 매핑테이블의 child_id는 자녀의 PK, 즉 ID가 담겨있고
  • 매핑테이블의 item_id는 아이템의 PK, 즉 ID가 담겨있다.

따라서 해당 자녀의 id가 해당 item의 id를 "소지"하고 있다는 개념으로 매핑 테이블을 활용 가능하다 !

논리적 관계

매핑 테이블을 사용할 때 주의할 점은
논리적으로 생각할 땐, 매핑 테이블은 생각하지 않는다는 것이다.

  • 자녀1의 id(PK)는 item_child 테이블에 여러개 존재한다 (X)
  • 자녀1은 아이템1, 아이템2, 아이템3을 보유한다. (O)

이렇게 논리적으론, 매핑 테이블과 관계를 생각하지 않아야 한다.

매핑 테이블은 오롯이 논리적 관점이 아닌 구현을 위해 만들어낸 테이블이다.


느낀 점

ERD 설계를 하다보니 모르는 것에 대해 많이 알게된다.

논리적 관점과 실제 구현을 위한 장치를 구분하여 생각하는 방법을 배울 수 있었다.

0개의 댓글