BackEnd Developer, Love Crossfit, Welcome to Jay's blog

우리, Spring Boot로 운동 기록 웹 만들어 봅세 - WODYWEB - 2.ERD 설계 과정

|


안녕? 오늘은 간단하게 DB 설계를 해볼께. 개인적으로 일단 빨리 시작하는게 중요하다 생각해서 확장성 고려는 최대한 배제하고 간소하게 만들어 봤어. DB 설계는 모든 확장성까지 반영해서 처음부터 완벽하게 만들 수 없다 생각해. 해서 1차적으로 DB 설계를 먼저 해보았고, 직접 개발해 가면서 필요한 순간이 왔을 때 DB 설계를 수정해나갈꺼야. 오늘도 그럼 한번 해볼께!


TODO

  • ERD 설계
  • 회원, 운동, 기록 domain, controller 생성
  • 회원 CRUD
  • 운동 CRUD
  • 기록 CRUD
  • VIEW 생성
  • 데이터 시각화 (charts.js)
  • SNS 가입 / 로그인 
  • JUnit 테스트 코드 작성


ERD 설계 (with 고민의 흔적)

alt text


운동 공개 범위에 대한 고민

개인이 생성한 운동만 보이도록 만들까? or 남이 어떤 운동했는지도 볼 수 있게? or 추천 운동도 만들까?

처음에는 본인이 생성한 운동만 보여주려 했는데 확장성 고려하다보니 기능이 세세해지고 많아지고 있군. 머리가 아프다. 일단 기본만 만들고 다시 생각 해보자.

결론: 본인이 생성한것만 보이도록 하자. 하다보면 다음 단계가 보이겠지.

내가 올린 운동만 볼 수 있다면, 운동 DB 구조는

  • id
  • member_id
  • 카테고리
  • 운동 이름
    • 기본: 생성 날짜 + 시/분
  • 세부 운동 동작
  • 공개범위 (확장성 고려)
    • 0: 전체공개, 1:나만 2:친구공개, 3:팀공개
    • 본인이 생성한것만 보여줄꺼니까 이 칼럼은 생략한다.

그리고 이 구조를 토대로 실제로 데이터가 어떻게 저장될지 생각해봤어

(데이터 예시 - 추후 추가 예정)

운동 카테고리에 대한 고민

운동 카테고리는 어떻게 나눌까? 뭐가 있지?

카테고리도 개인이 직접 만들 수 있게 놔둘까? or
카테고리를 미리 생성해두고 사용자는 거기서 선택해서 사용하도록 할까?

결론: 유저가 카테고리 직접 생성하도록 만들자



ERD - 1차 결과

alt text


연관 관계

회원과 운동기록 (1: N)

  • 유저 1명은 여러 운동기록을 갖을 수 있다.
  • 운동기록 1개는 1명의 회원에 맵핑괸다.

회원과 운동 (1: N)

  • 유저 1명은 여러개의 운동을 할 수 있다.
  • 1개의 운동은 1명의 회원과 맵핑된다.

운동과 운동기록 (1: N)

  • 운동기록 1개는 1개의 운동과 맵핑된다.
  • 하나의 운동은 여러개의 운동기록을 갖을 수 있다.

운동과 카테고리 (N: M)

  • 운동 한개는 여러개의 카테고리에 속할 수 있다.
  • 카테고리 1개는 여러 운동을 갖는다.
  • 카테고리는 여러 하위 카테고리(child)를 갖을 수 있다.
  • 카테고리는 하나의 상위 카테고리(parent)를 갖는다.

다음에는 도메인 생성을 해볼께

[다음글 보기] - 도메인 생성