2023.1.9(월) 제이크 멘토님 코멘트


Bookmark

Bookmark 는 대표적으로 팔로우와 비슷한 구조를 갖고 있습니다. 이러한 테이블의 유형에 있어서 특히 조인을 신경써야 합니다.

Q) 만일 Habit 데이터가 5만개가 있고, 회원이 5만명이 가입되어 있는 경우, 특정 사용자별 북마크 표시를 노출시키기 위해 우리는 어떤 쿼리가 필요할까요?

select bookmark_id, habit_id, user_id
from bookmark
where user_id = 특정 사용자 식별자
select bookmark_id, habit_id, user_id
from habit
left outer join bookmark
on habit.habit_id = bookmark.habit_id
where user_id = 특정 사용자 식별자

Habit 데이터가 5만개가 있고, 회원이 5만명이 가입되어 있는 경우 Bookmark 테이블에는 최대 25만개의 데이터가 있을 수 있기 때문에 Bookmark 테이블에서 full scan으로 탐색하는 것보다, 데이터가 최대 5만개 있는 Habit에서 habitId를 기준으로 Bookmark 테이블을 조인(join)해서 그 데이터로부터 탐색하는 것이 더 빠를 것이라고 생각했습니다.

카테고리

카테고리와 Tag 도 한번 구분해서 생각해보는것도 좋을 것 같습니다. 카테고리는 일반적(보편적)으로 Admin 이 카테고리에 대한 정보를 넣으면, 사용자가 카테고리를 선택하는 구조로 사용하긴 합니다. (물론 반드시는 아닙니다.)

Q) 만일 관리자가 카테고리 유형을 입력하고, 사용자가 선택하게끔 하고 싶은 요구사항이 있을 때에는 어떤 테이블 구조가 필요할까요?

현재 테이블 구조가 이러한 요구사항을 반영하고 있다고 생각합니다. 보내드렸던 ERD 상 연관관계 표시 오류가 있었습니다. Category마다 고유한 식별자를 가지고 있습니다(ex. HEALTH = 1, ECHO = 2, FOOD = 3)

Category(N) : Challenge(1)Category(1) : Challenge(N)

Q) 관리자는 습관의 카테고리 유형이 어떤 유형들이 있는지 알고 싶습니다. 이를 위해서는 어떤 쿼리가 필요할까요?

select c.type from category c