중간 테이블의 존재 이유

Soozoo·2024년 11월 8일

데이터베이스(DB)

목록 보기
19/19
  • 중간 테이블을 써야 하는 이유 DB에 중간 테이블(Mapping Table)의 존재 이유 관계형 데이터베이스(Relational Database)에서 중간 테이블(Mapping Table)은 종종 두 개 이상의 테이블 사이의 관계를 나타내기 위해 사용됩니다. 중간 테이블의 존재 이유는 데이터 모델링에서 관계를 명확히 하고, 복잡한 다대다(N:M) 관계를 효율적으로 처리하기 위함입니다. 이번 글에서는 중간 테이블의 필요성과 그 활용에 대해 알아보겠습니다.

    1. 다대다(N:M) 관계 해결

    가장 흔한 중간 테이블의 사용 사례는 다대다 관계를 처리하는 것입니다. 예를 들어, 학생과 강의 관계를 생각해 봅시다. 하나의 학생은 여러 개의 강의를 수강할 수 있고, 하나의 강의는 여러 명의 학생이 수강할 수 있습니다. 이를 관계형 데이터베이스에서 표현하려면 중간 테이블이 필요합니다.
    • 학생 테이블(Students): 학생 정보를 담고 있음

    • 강의 테이블(Courses): 강의 정보를 담고 있음

    • 수강 테이블(Enrollments): 학생과 강의 간의 관계를 저장하는 중간 테이블

      이때 수강 테이블이 중간 테이블이 되어, 학생과 강의의 관계를 연결합니다. 수강 테이블은 각 학생이 어떤 강의를 수강하고 있는지에 대한 정보를 저장하며, 이를 통해 다대다 관계를 처리합니다.

      예시:

    • 학생 테이블(Students):

      student_idstudent_name
      1김철수
      2이영희
    • 강의 테이블(Courses):

      course_idcourse_name
      101수학
      102영어
    • 수강 테이블(Enrollments):

      | student_id | course_id |
      | --- | --- |
      | 1 | 101 |
      | 1 | 102 |
      | 2 | 101 |

      이처럼, 중간 테이블은 두 테이블 간의 관계를 명확히 정의하고, 필요한 데이터에 대한 접근을 용이하게 만듭니다.

      2. 정규화와 데이터 중복 방지

      중간 테이블을 사용하면 데이터베이스를 정규화할 수 있습니다. 정규화는 데이터를 중복 없이 효율적으로 저장하기 위한 프로세스로, 데이터를 여러 개의 작은 테이블로 분할하는 방법입니다. 이를 통해 데이터 중복을 최소화하고, 저장 공간을 절약할 수 있습니다.

      예를 들어, 위에서 설명한 학생-강의 관계에서 중간 테이블이 없다면, 학생 테이블에 강의 정보가 중복될 수 있습니다. 여러 명의 학생이 같은 강의를 수강할 때, 그 강의 정보를 각 학생 레코드마다 반복해서 저장해야 할 것입니다. 이는 불필요한 데이터 중복을 초래하고, 관리가 어려워집니다.

      3. 추가적인 속성 저장

      중간 테이블을 사용하면, 두 테이블 간의 관계에 추가적인 정보를 저장할 수 있는 장점이 있습니다. 예를 들어, 학생이 강의를 수강한 날짜나 수강 상태(수료/미수료) 등의 정보를 추가로 저장하고 싶다면, 중간 테이블에 해당 필드를 추가할 수 있습니다.

      예시:

    • 수강 테이블(Enrollments):

      | student_id | course_id | enrollment_date | status |
      | --- | --- | --- | --- |
      | 1 | 101 | 2024-03-01 | 수료 |
      | 1 | 102 | 2024-03-01 | 미수료 |
      | 2 | 101 | 2024-03-02 | 수료 |

      이렇게 중간 테이블에 추가적인 속성을 두면, 관계를 더 정교하게 표현하고 관리할 수 있습니다.

      4. 성능 최적화 및 쿼리 효율성

      중간 테이블은 복잡한 조인(Join)을 통해 여러 테이블을 연결하는 데 유용합니다. 예를 들어, 학생과 강의 테이블을 직접 조인하면 불필요한 중복 데이터를 가져올 수 있습니다. 그러나 중간 테이블을 사용하면, 필요한 데이터만 정확히 조인할 수 있어 성능이 최적화됩니다. 또한, 중간 테이블을 활용한 관계 설정은 쿼리의 가독성도 높여 줍니다.

      예시:

      학생이 수강한 강의를 조회하는 쿼리:

      SELECT s.student_name, c.course_name
      FROM Students s
      JOIN Enrollments e ON s.student_id = e.student_id
      JOIN Courses c ON e.course_id = c.course_id;
      

      위 쿼리는 학생 테이블강의 테이블을 직접 조인하는 것이 아니라, 수강 테이블을 중간 테이블로 활용하여 효율적으로 데이터를 조회합니다.

      5. 유연한 관계 확장성

      중간 테이블을 사용하면 데이터 모델이 유연해집니다. 관계를 확장할 때, 테이블 구조를 크게 변경하지 않고도 중간 테이블에 새로운 속성이나 테이블을 추가하는 것만으로 쉽게 확장할 수 있습니다. 예를 들어, 학생과 강의 외에도, 학생-강의-교수 관계를 추가하고 싶다면, 기존 중간 테이블을 확장하여 교수 정보를 저장하는 컬럼을 추가할 수 있습니다.

      결론

      중간 테이블은 다대다 관계를 효율적으로 처리하고, 정규화를 통해 데이터 중복을 방지하며, 추가적인 속성 저장이 가능하고, 쿼리 성능을 최적화하는 등 다양한 이유로 관계형 데이터베이스에서 중요한 역할을 합니다. 또한, 유연한 데이터 모델링을 가능하게 하여, 시스템 확장이 용이하도록 도와줍니다. 따라서 중간 테이블을 적절히 활용하는 것은 데이터베이스 설계의 핵심적인 부분입니다.

profile
넙-죽

0개의 댓글