Skip to main content

M:N 관계 (다대다)

한눈에 보기

M:N 관계는 양쪽 모두 여러 개씩 연결되는 관계입니다. 설정하면 중간 테이블이 자동으로 생성되어, 개발자가 직접 만들 필요가 없습니다.

소개

M:N 관계는 양쪽 테이블의 데이터가 서로 여러 개씩 연결될 수 있는 관계입니다.

예시: 품목과 공급업체

  • 품목 하나를 여러 공급업체에서 납품받을 수 있습니다
  • 공급업체 하나가 여러 품목을 납품할 수 있습니다
품목 (다)
볼트
너트
와셔
← M:N →
공급업체 (다)
(주)A사
(주)B사
(주)C사

이렇게 보입니다

캔버스에서의 모습

M 관계 캔버스 화면

캔버스에서 M:N 관계를 설정하면 두 테이블 사이에 중간 테이블이 자동으로 생성됩니다.

품목
— N:M →
품목_공급업체
(자동 생성)
— M:N →
공급업체

자동 생성되는 중간 테이블

M 중간 테이블

중간 테이블(Junction Table)에는 양쪽 테이블의 FK 컬럼이 자동으로 포함됩니다.

중간 테이블의 구조:

컬럼타입설명
idUUID자동 생성 PK
품목_idFK품목 테이블 참조
공급업체_idFK공급업체 테이블 참조

중간 테이블에 추가 컬럼을 넣을 수도 있습니다:

추가 컬럼용도
납품단가공급업체별 품목 단가
리드타임공급업체별 납품 소요일
우선순위주거래처 여부

화면에서의 모습

M:N 관계는 양식에서 주로 다중 선택 형태로 나타납니다:

품목 양식
(주)A사
(주)B사
(주)C사
(주)D사

또는 중간 테이블에 추가 컬럼이 있을 경우 서브테이블 형태로 나타납니다:

품목 양식
공급업체 목록
공급업체납품단가리드타임우선순위
(주)A사1003일주거래
(주)B사1105일보조

설정 방법

1단계: M:N 관계 생성

  1. 캔버스에서 첫 번째 테이블에서 두 번째 테이블로 드래그합니다
  2. 관계 속성 패널에서 "M:N" 을 선택합니다
  3. 중간 테이블이 자동으로 생성됩니다

2단계: 중간 테이블 설정 (선택)

자동 생성된 중간 테이블에 추가 컬럼이 필요하면:

  1. 캔버스에서 자동 생성된 중간 테이블 노드를 클릭합니다
  2. 속성 패널에서 추가 컬럼을 설정합니다 (예: 납품단가, 리드타임)

3단계: 배포

배포하면 세 개의 테이블이 모두 생성됩니다 (양쪽 테이블 + 중간 테이블).

M:N vs 1:N 두 개로 분리

M:N 관계는 내부적으로 1:N + N:1 두 개의 관계와 같습니다:

M:N 관계
품목
M:N
공급업체
=
실제 내부 구조
품목
— 1:N →
중간TB
← N:1 —
공급업체

중간 테이블에 추가 데이터(단가, 리드타임 등)를 넣어야 할 때는 M:N 관계를 사용하지 않고, 직접 중간 테이블을 만들어서 1:N 두 개로 연결하는 것도 좋은 방법입니다.

실무 예시

테이블 A테이블 B중간 테이블 추가 컬럼
품목공급업체납품단가, 리드타임
작업자공정숙련도, 자격증
설비금형장착일, 교체주기
제품원자재소요량 (BOM)

자주 묻는 질문

Q: 중간 테이블의 이름을 변경할 수 있나요? A: 네, 자동 생성된 중간 테이블의 이름을 원하는 이름으로 변경할 수 있습니다.

Q: 중간 테이블에 컬럼을 추가한 후 화면은 어떻게 되나요? A: 추가 컬럼이 있으면 다중 선택 대신 서브테이블 형태로 바뀝니다.

Q: M:N 관계를 삭제하면 중간 테이블도 삭제되나요? A: 네, M:N 관계를 삭제하면 자동 생성된 중간 테이블도 함께 삭제됩니다. 이미 데이터가 있다면 주의하세요.

다음 단계