[DATABASE] 다대다 관계 해소

박중연·2024년 3월 20일

N:N 관계의 예

DB 모델링 과정에서 N:N관계가 생길 수 있다
한 테이블에 있는 여러 레코드가 다른 테이블에 있는
여러 레코드와 연관되어 있는 경우가 발생한다.

[학생테이블]

학번이름학과과목코드
1홍길동컴공과S1
1홍길동컴공과S2
1이길동토목과S2
1이길동토목과S3
1삼길동컴공과

[과목테이블]

과목코드과목명담당교수수강학생
S1데이터베이스김철수1
S2파이썬김영희1
S2파이썬김영희2
S3알고리즘박주문3

위와 같이 구성된 N:N 관계에서 어떤 문제가 발생할까?

  • 테이블의 PK가 없어져 버렸다. 학생 테이블에서는 학번만으로 데이터를 구분할 수 없어졌다. 과연 학생+과목코드의 조합키가 학생 데이터를 구별하는 데이터일까? S1과목을 수강한 1번 학생과 S2를 수강한 1번 학생은 다른가? 과목 테이블 역시 마찬가지 이다.
  • 1번 학생의 수강 과목을 확인하기 위해서 학생 테이블을 확인해야할까? 아니면 과목 테이블을 확인해야할까? 데이터가 중복되다 보니 학생에서도 가능하고 과목에서도 가능해져서 애매한 상황이 발생한다.
  • 만약 홍길동이 전과를 해서 수학과로 학과를 변경해야 한다면 어떻게 될까? 학생 테이블에서 현재는 2군데의 데이터를 수정해야 한다. 여러과목을 수강했다면 더욱 많은 데이터를 수정해야 한다.

해결방법
-N:M 관계를 각각 1:N, 1:M으로 풀어 줄 수 있는 연관 테이블을 추가해주는 것

[수강 테이블]

수강번호학번과목코드
11S1
21S2
32S2
42S3

다음과 같은 테이블을 추가해 관계를 풀어준다.

profile
개발자로 취업하기

0개의 댓글