JakSimFriend / backend

JakSimFriend Backend
0 stars 0 forks source link

database: change database schema #3

Open dbgus opened 2 years ago

dbgus commented 2 years ago

기존 database의 schema상 정리가 필요해보여 현재 database의 문제점을 공유하고 수정하면 좋을 거 같습니다.

  1. Relational 현재 schema는 과도할 정도로 Relational이 잡혀있습니다. 이는 유지보수면에서 좋지 못합니다(ex: 추후 쓸모가 없어진 database를 정리하지 못하는 경우가 발생할 수 있음.)
  2. Naming table, column등 전반적인 면에서 파악이 힘들어질 거 같습니다.
dbgus commented 2 years ago

이슈 및 수정사항

  1. ChallengeWaiting table은 필요 없어보임. member.status에 대기 여부 타입을 부여해도 될 거 같음
  2. challenge에 userId는 필요가 없음 개설자의 id를 넣는건 memeber에서 userType으로 추가 해도 무방할 거 같음
  3. ChallengeTag에 userId는 필요가 없음 개설자가 자신이 만든 Challenge tag를 보려면 join으로 가져와도 무방할 거 같음
  4. ChallengePoint table은 필요 없어보임 ChallengePoint는 Challenge에 참여 할 때 사용한 point 사용 내역을 작성하려는 거 같음, point의 변화 관련은 다른 변화점이랑 모으는 것이 맞다고 봄.
  5. CertificationAlert는 ChallengeAlert과 합쳐져도 괜찮을 거 같음
  6. ChallengeAlert의 userId는 필요 없어 보임 Certification한 유저의 정보를 가지고 오기 위함이면 Certification를 join해서 가지고 오는 것이 괜찮아보임
  7. Calculate 제거 Calculate또한 point 관련이니 추후 하나로 모아두는 편이 좋아보임
  8. Status -> SeasonLog experience를 누적이 아닌 단일, ChallengeIdx추가
  9. Search table은 필요 없어보임
  10. reaction관련 ReactionHistory -> Reaction Reaction -> ReactionType
  11. AlertCategory의 존재는 무엇인가요?
  12. AchievementRate AchievementRate를 member와 연결 challengeIdx 제거
  13. PointTransaction 생성 모든 포인트 사용 내역을 관리 하기 위함
  14. User.balance 현재 user의 point 잔액을 알기 위함

ps. Report을 할 때 단순히 Challenge의 id만 받는 것이 아닌 무엇에 대한 Report을 받는지도 중요할 거 같습니다.

dbgus commented 2 years ago

ERD diagram png이긴 하나 사이즈가 커서 다운로드 받아서 보는 것을 추천

dbgus commented 2 years ago

@choiyeeun1010 아무래도 서비스 파악이 다 안끝난 상태에서 ERD 정리를 진행을 한 것이라 의도와 다른 부분이 있을 수 있습니다 관련 작업 진행하시면서 답변 남겨주시면 저도 참고해보겠습니다. 추가적으로 sql 파일이 필요 하실 경우 따로 말씀주세요 github issues에는 sql파일이 안올라가네여...

choiyeeun1010 commented 2 years ago

넵 반영했습니다. 스키마(jaksimDB) 따로 생성해서 테이블들 추가 해놨습니당

다만,

  1. 멤버 타입 테이블 따로 생성할 필요 없이 그냥 컬럼으로 추가해도 무방할 것 같아서 컬럼으로 만들어 논 상태입니다.
  2. challengeIdx는 삭제를 보류했습니다. 그 이유는 만약 한 사용자가 특정 챌린지의 달성률 정보를 얻고자 할 때 challengeIdx 없이는 챌린지 구별이 불가능하다고 판단이 됐습니당 (member 테이블과 조인해도 userIdx만으로는 구별 불가능하다고 생각) - 제가 잘못 판단 했을 수도 있으니 제거해도 구별이 가능하다면 말씀 부탁드려요!

추가로 삭제한 부분이 있는데, Challenge table 일부 컬럼 삭제 - 요금, 제한 인원 컬럼은 정해진 값이 있어 컬럼에서 불필요하여 제거했습니다. Interest table 삭제 - 초기에 디자인했을 때 사용자의 관심 자기계발 카테고리 정보도 얻을라 했지만 디자인이 변경되어 불필요한 테이블이 되어버렸습니당.

dbgus commented 2 years ago

아직 db 설계에 관해서 토론이 끝난것이 아니니까 issues reopen 하겠습니다

dbgus commented 2 years ago
  1. 멤버 타입 테이블 따로 생성할 필요 없이 그냥 컬럼으로 추가해도 무방할 것 같아서 컬럼으로 만들어 논 상태입니다.

A: memeberType table은 추후 만약 유저의 권한 등과 연관이 있을 거 같아 추가했습니다.

  1. challengeIdx는 삭제를 보류했습니다. 그 이유는 만약 한 사용자가 특정 챌린지의 달성률 정보를 얻고자 할 때 challengeIdx 없이는 챌린지 구별이 불가능하다고 판단이 됐습니당 (member 테이블과 조인해도 userIdx만으로는 구별 불가능하다고 생각) - 제가 잘못 판단 했을 수도 있으니 제거해도 구별이 가능하다면 말씀 부탁드려요!

A: 이부분은 말씀해주신게 맞는 거 같습니다 :)