M:N 관계 (다대다)
한눈에 보기
M:N 관계는 양쪽 모두 여러 개씩 연결되는 관계입니다. 설정하면 중간 테이블이 자동으로 생성되어, 개발자가 직접 만들 필요가 없습니다.
소개
M:N 관계는 양쪽 테이블의 데이터가 서로 여러 개 씩 연결될 수 있는 관계입니다.
예시: 품목과 공급업체
- 품목 하나를 여러 공급업체에서 납품받을 수 있습니다
- 공급업체 하나가 여러 품목을 납품할 수 있습니다
품목 (다)
볼트
너트
와셔
← M:N →
공급업체 (다)
(주)A사
(주)B사
(주)C사
이렇게 보입니다
캔버스에서의 모습
캔버스에서 M:N 관계를 설정하면 두 테이블 사이에 중간 테이블이 자동으로 생성됩니다.
품목
— N:M →
품목_공급업체
(자동 생성)
(자동 생성)
— M:N →
공급업체
자동 생성되는 중간 테이블
중간 테이블(Junction Table)에는 양쪽 테이블의 FK 컬럼이 자동으로 포함됩니다.
중간 테이블의 구조:
| 컬럼 | 타입 | 설명 |
|---|---|---|
| id | UUID | 자동 생성 PK |
| 품목_id | FK | 품목 테이블 참조 |
| 공급업체_id | FK | 공급업체 테이블 참조 |
중간 테이블에 추가 컬럼을 넣을 수도 있습니다:
| 추가 컬럼 | 용도 |
|---|---|
| 납품단가 | 공급업체별 품목 단가 |
| 리드타임 | 공급업체별 납품 소요일 |
| 우선순위 | 주거래처 여부 |
화면에서의 모습
M:N 관계는 양식에서 주로 다중 선택 형태로 나타납니다:
품목 양식
☑ (주)A사
☑ (주)B사
☐ (주)C사
☐ (주)D사
또는 중간 테이블에 추가 컬럼이 있을 경우 서브테이블 형태로 나타납니다:
품목 양식
공급업체 목록
| 공급업체 | 납품단가 | 리드타임 | 우선순위 |
|---|---|---|---|
| (주)A사 | 100 | 3일 | 주거래 |
| (주)B사 | 110 | 5일 | 보조 |
설정 방법
1단계: M:N 관계 생성
- 캔버스에서 첫 번째 테이블에서 두 번째 테이블로 드래그합니다
- 관계 속성 패널에서 "M:N" 을 선택합니다
- 중간 테이블이 자동으로 생성됩니다
2단계: 중간 테이블 설정 (선택)
자동 생성된 중간 테이블에 추가 컬럼이 필요하면:
- 캔버스에서 자동 생성된 중간 테이블 노드를 클릭합니다
- 속성 패널에서 추가 컬럼을 설정합니다 (예: 납품단가, 리드타임)
3단계: 배포
배포하면 세 개의 테이블이 모두 생성됩니다 (양쪽 테이블 + 중간 테이블).
M:N vs 1:N 두 개로 분리
M:N 관계는 내부적으로 1:N + N:1 두 개의 관계와 같습니다:
M:N 관계
품목
M:N