본문 바로가기

프레임워크(Framework)/Spring

테이블 간 연관관계에서 M:N을 쓰면 안 되는 이유?

테이블 간 연관관계의 3종류의 예시를 간단하게 들어보면,

  • 1:1     한 학생은 고유한 학번을 가진다.
  • 1:N    하나의 학과에는 여러 학생이 소속될 수 있다. 한 명의 학생은 하나의 학과(주전공)에 소속된다.
  • N:M   한 학생은 여러 개의 과목을 수강할 수 있고, 하나의 과목은 여러 명의 학생들에 의해 수강된다.

 

그러면 M:N을 쓰면 안 되는 이유는 무엇일까?

 

1. 하나의 컬럼에 리스트로 넣을 수 없고 학생 수만큼 컬럼 수를 늘릴 수도 없음 => 속성의 원자성 위반 

PK 과목명 FK_학생 
0011 알고리즘 001, 002, 003
0022 자료구조  
0033 운영체제  

 

PK 학생명 FK_수강과목
001 우채윤  
002 오수연  
003 윤재욱  

 

 

2. 삭제 수정 시(Delete, Update) 서로가 서로를 참조하고 있기에 두 테이블을 모두 변경해야 한다. 

 

ex) 학생을 삭제하려고 하면 학생이 수강하는 과목 테이블에도 변경이 이루어진다.

 

 


 

해결책? 

 

PK FK_학생 FK_수강과목
1 001 0022
2 002 0022
3 003 0022

 

각 테이블의 기본키를 매핑해서 NEW 테이블을 생성하자!