CS/DataBase

[DataBase] 다대다(M:N) 관계 연결 테이블 구현

엥재 2023. 4. 24. 21:37

다대다 (M:N) 관계


두 개의 테이블이 서로의 행에 대해 여러개로 연관 되어 있는 상태를 다대다(M:N)관계라고 한다. 예를 들어 한명의 학생이 여러 수업을 수강하고, 한 수업은 여러 학생을 수용하는데 이를 ERD로 표현하면 다음과 같다.
ERD (Entity Relationship Diagram)
: 개체-관계 모델. 테이블간의 관계를 설명해주는 다이어그램이라고 볼 수 있으며, 이를 통해 프로젝트에서 사용되는 DB의 구조를 한눈에 파악할 수 있다. 즉, API를 효율적으로 뽑아내기 위한 모델 구조도라고 생각하면 된다.

학생 테이블과 수업 테이블이 다대다 관계로 연관되어 있다.

 

 

다대다(M:N) 구현하기

논리적으로 다대다관계의 표현은 가능하지만 2개의 테이블만으로 구현하는 것은 불가하다. 다대다 관계를 실제로 구현하려면 각 테이블의 Primary Key를 외래키(FK)로 참조하고 있는 연결 테이블(매핑 테이블)을 사용해야 한다.

  • '학생테이블'과 '학생_수업테이블'이 일대다 관계로 연관되어 있고, '학생_수업테이블'과 '수업테이블'이 다대일 관계로 연관되어 있다.

 

예를 들어 '철수'는 '국어' , '영어', '수학' 3가지의 수업을 수강하고 있고, '수학'이라는 수업은 '철수', '영희', '미자'라는 학생을 수용하고 있는데 테이블에 입력하면 다음과 같다.

 

 

[학생]

학생 이름 학생 코드
철수 1
영희 2
미자 3

 

[학생_수업] - 연결 테이블(매핑 테이블)

학생 코드 수업 코드
1 a
1 b
1 c
2 c
3 c

 

[수업]

수업명 수업 코드
국어 a
영어 b
수학 c

 

만약 철수가 듣고 있는 수업을 알고 싶다면, 철수의 학생코드 1을 조건문으로 학생_수업 테이블을 조회한다.

만약 영희가 국어 수업을 듣는다면, 영희의 학생 코드 2와 국어 수업코드 a를 학생_수업 테이블에 삽입한다.

 

 

TIP 🔍) 테이블간 관계를 이해하기 어려울 때

 

1. 관계를 생각할 때 테이블이 아닌 '한 행'을 기준으로 생각하자. 따라서 테이블 명도 '학생 목록' , '수업 목록'이 아닌 한 행을 대표할 수 있는 이름인 '학생' , '수업'으로 해야 한다.

 

2.  논리적으로 생각할 땐 연결 테이블은 생각하지 않는다.

- 철수의 학생 코드는 학생_수업 테이블에 여러 개 존재한다 (XXXX)

- 철수는 국어, 영어, 수학 수업을 수강한다 (O)

 

3. 항상 일대다(1:N) 기준으로 생각한다. 다대일(N:1)보다 직관적으로 이해하기가 쉽다.

- 철수가 여러 수업을 수강한다 (O)

- 국여,영어,수학은 철수를 수용한다. (X)


 

참고 자료

https://siyoon210.tistory.com/26

 

다대다(M:N) 관계 연결테이블로 구현하기

다대다(M:N) 관계 두 개의 테이블이 서로의 행에 대해서 여러개로 연관 되어 있는 상태를 다대다(M:N)관계라고 합니다. 예를 들어 보겠습니다. 한명의 학생이 여러 수업을 수강하고, 한 수업은 여

siyoon210.tistory.com