데이터베이스에서 A, B 테이블이 다대다(M:N) 관계일 경우, 중간 테이블 C를 생성하고
A와 C를 다대일(M:1), C와 B를 일대다(1:N)으로 설정해서 풀어낸다.
중간 테이블 없이 A와 B를 연결하는 데이터를 직접 저장한다면
- 중복 데이터 문제나
- 유지보수에서 어려움이 발생한다.
하지만 중간 테이블을 사용하면
- 데이터 간의 중복을 제거할 수 있고
- 확장성이 좋으며
- 정규화를 통해 데이터 무결성, 일관성을 유지할 수 있으며
- 효율적인 데이터 관리가 가능하다.
예시
중간 테이블을 사용하지 않는 구조
예를 들어, 학생과 강의가 있다면
한 학생이 여러 강의를 수강할 수 있고, 한 강의는 여러 명의 학생이 수강할 수 있으므로 다대다 관계이다.

만약 중간 테이블을 사용하지 않는 상태에서
홍길동이 수학, 자바를
김민수가 자바, 알고리즘을
김영희가 알고리즘 강의를 수강하고 있다면 데이터가 아래와 같이 저장될 것이다.

중간 테이블을 사용하는 구조
똑같은 데이터가 있을 때 중간 테이블을 사용한 구조는 아래와 같다.


중간 테이블을 사용하는 경우
- 중복 데이터가 제거되고, 관계만 저장되므로 더 효율적이다.
- 강의명을 변경하는 경우 강의 테이블에서만 관리하므로 수정이 간단하다.
- 중간 테이블에 수강 날짜, 성적 등의 새로운 데이터를 쉽게 추가할 수 있다.
비교
중복 데이터
중간 테이블을 사용하지 않는 경우 중복 데이터가 변경되거나 삭제될 때, 중복된 데이터를 모두 변경하거나 모두 삭제해야 한다.
모든 중복 데이터를 변경하는 과정에서
- 일부 데이터를 잘못 업데이트해 무결성 문제를 발생시킬 수 있으며,
- 데이터를 변경하기 위한 시간이 중복되는 데이터의 개수만큼 필요하다.

강의명을 "자바"
에서 "Java"
로 변경하면 2, 3행의 데이터를 모두 수정해야 한다.
중복 데이터가 많을수록 데이터를 수정하기위해 많은 시간이 소요되고 이 과정에서 오류가 발생할 확률도 증가한다.
삭제 시에도 마찬가지로 일부 데이터를 삭제하지 못해 무결성 문제를 발생시킬 수 있으며 중복되는 데이터의 개수만큼 삭제하는데 시간이 추가로 소요된다.
중간 테이블을 사용하는 경우 중복 데이터가 발생하지 않는다.
따라서 데이터를 변경하거나 삭제할 때,
- 데이터 무결성 오류가 발생할 가능성이 없고,
- 단 한 번의 수행으로 작업을 완료할 수 있으며
- 중복 데이터가 제거된 만큼 저장 공간을 절약할 수 있다.

강의명을 "자바"
에서 "Java"
로 변경하면 한 개의 행에서만 데이터를 수정하면 된다.

테이블 확장
중간 테이블을 사용하지 않는 경우 테이블을 확장 시 연관된 두 테이블 모두에 영향을 주게 되며 테이블이 과하게 비대해질 수 있다.

중간 테이블을 사용하는 경우 테이블 변경의 영향 범위가 중간 테이블로 한정된다.


'데이터베이스' 카테고리의 다른 글
[데이터베이스] N+1 문제 (0) | 2025.03.22 |
---|---|
[SQL] WHERE 1 = 1을 쓰는 이유 (0) | 2025.02.10 |