728x90
반응형
예를들어, 목표가 있다고 하자. 그 목표에는 이름도 있고 날짜도 있다. 그리고 태그도 있다. 여기에서 태그에는 라벨과 이모지가 데이터가 들어간다. 기존에 쓰던 MongoDB와 같은 문서 기반에서는 아래와 같이 쓴다.
{
"name": "Spring 공부하기",
"tags": [
{ "label": "공부", "emoji": "📚" },
{ "label": "개발", "emoji": "💻" }
]
}
이런 식으로 Goal 안에 tags를 박아버리면 끝이다. 하지만 관계형 데이터 베이스에선 그러면 안된다. 왜냐하면 Goal과 Tag가 다대다(N:N) 관계이기 때문이다. 예를들어 하나의 목표(=Spring 공부하기)에 여러 태그(=공부, 개발)가 있을 수 있다. 그리고 하나의 태그(=공부)가 여러 목표(=Spring 공부하기, 수학 공부하기, 운동 루틴 공부)에 재사용된다.
중간 테이블
이럴 경우 관계형 데이터베이스는 중간 테이블이 필요하다. Goal(N) <- GoalTag -> Tag(N)으로 말이다. GoalTag가 두 테이블을 연결하는 교차 테이블 역할을 해주는 것이다.
중간 테이블이 있으면 하나의 Tag를 여러 Goal에 재사용 가능하다. 검색 성능 또한 향상되며 추후 태그별 통계, 인기 태그 순위 같은 분석도 가능하다.
728x90
반응형
댓글