dnd-side-project / dnd-11th-2-backend

작심삼일 러너들을 위한 앱, RunUs 🏃🏻‍♀️🌎‍🏃🏻‍🌏
0 stars 1 forks source link

challenge, challenge_achievement 테이블 구조 변경 #102

Closed hee9841 closed 1 month ago

hee9841 commented 1 month ago

📌 작업 요구 사항 요약

📋 상세 요구 사항

challenge 테이블 컬럼 내용
id
name 챌린지 이름
expected_time 예상 소요 시간
challenge_type 챌린지 타입(어제의 기록, 오늘의, ..등)
imge_url 챌린지 이미지 url
challenge_goal_condition 테이블(챌린지의 목표에 관한 조건을 저장하는 테이블) 컬럼 내용
id
challenge_id 챌린지 id(fk)
goal_value 목표 값(시간:초, 거리:미터, 페이스:초 단위)
goal_type 목표 타입(거리, 시간, 페이스 등)
comparison_type 비교 타입(같음, 더 큼, 저 적음 등)
challenge_achievement_percentage 테이블 컬럼 내용
id
challenge_achievement_id 챌린지 성취 테이블 id(fk)
achievement_value 달성 값
start_value 퍼센테이지 시작 값
end_value 퍼센테이지 끝 값

🤔 예상 구현 방법

hee9841 commented 1 month ago

@Jaewon-pro 리뷰 부탁드립니다 😄

Jaewon-pro commented 1 month ago

challenge 테이블의 expected_timeChallengeData처럼 varchar인가요? 다른 테이블과 유사하게 expected_time은 초단위 정수로 저장하는 건 어떻게 생각하시나요?

페이스의 경우, 0분으로 표현하는데, 컬럼을 NULL을 허용하고 NULL로 저장하면 어떨까요?

hee9841 commented 1 month ago

expected_time은 초 단위로 저장하게 되면 초 단위 값을 "MM분" 형식으로 포멧팅하는 과정이 더 들어가기도 하고, 해당 값은 따로 계산을 하는데 사용되지 않고 단순히 사용자한테 보여지는 값이라서 굳이 초 단위 정수로 저장할 필요가 없다고 생각합니다.

제 생각에는 varchar로 저장하는게 더 괜찮다고 생각하는데 어떻게 생각하시나요?

Jaewon-pro commented 1 month ago

다국어 지원시, 포멧팅하는 과정은 client 단에서 처리해야 할 것 같아요.

그런데 저희 서비스는 다국어 지원을 할 예정이 없으므로 varchar로 하면 될 것 같아요

hee9841 commented 1 month ago

좀 더 고민을 해봤는데 테이블 일관성을 위해 int로하는게 더 좋을 것 같네요! 그리고 장기적으로 봤을 때도 데이터 관리 측면에서도 int가 더 좋을 것 같아요.

hee9841 commented 1 month ago

그럼 이대로 진행하겠습니다!

Jaewon-pro commented 1 month ago

네! varchar도 좋지만, int로 할 때 장점이 있는 것 같아서 말씀드렸어요!