본문 바로가기
Back Side/DBMS > MySQL

관계형 데이터베이스의 중간 테이블

by developerBeluga 2025. 4. 13.
728x90
반응형

 

 

 

 

예를들어, 목표가 있다고 하자. 그 목표에는 이름도 있고 날짜도 있다. 그리고 태그도 있다. 여기에서 태그에는 라벨과 이모지가 데이터가 들어간다. 기존에 쓰던 MongoDB와 같은 문서 기반에서는 아래와 같이 쓴다.

{
  "name": "Spring 공부하기",
  "tags": [
    { "label": "공부", "emoji": "📚" },
    { "label": "개발", "emoji": "💻" }
  ]
}

이런 식으로 Goal 안에 tags를 박아버리면 끝이다. 하지만 관계형 데이터 베이스에선 그러면 안된다. 왜냐하면 Goal과 Tag가 다대다(N:N) 관계이기 때문이다. 예를들어 하나의 목표(=Spring 공부하기)에 여러 태그(=공부, 개발)가 있을 수 있다. 그리고 하나의 태그(=공부)가 여러 목표(=Spring 공부하기, 수학 공부하기, 운동 루틴 공부)에 재사용된다.

 

 

중간 테이블

이럴 경우 관계형 데이터베이스는 중간 테이블이 필요하다. Goal(N) <- GoalTag -> Tag(N)으로 말이다. GoalTag가 두 테이블을 연결하는 교차 테이블 역할을 해주는 것이다. 

https://dbdiagram.io/d

중간 테이블이 있으면 하나의 Tag를 여러 Goal에 재사용 가능하다. 검색 성능 또한 향상되며 추후 태그별 통계, 인기 태그 순위 같은 분석도 가능하다. 

728x90
반응형

댓글