마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

DB 설계좀 봐주세요.

0 추천

현재 대강의 앱화면입니다.

흐름을 설명드리면 

2번 화면에서 3번화면으로 넘어가 운동을 선택하고 4번화면에서 상세 정보를 작성합니다.

이후 추가를 누르면 2번화면에 추가되는 방식인데요.

2번화면에서 최종적으로 저장버튼을 누르면(현재사진에는 나타나있지않습니다) 정보들이 DB에 저장되고

1번 화면처럼 날짜와 그날 진행한 부위만 간단하게 나타나는 방식입니다.

1번화면에서 리스트를 누르면 2번화면으로 넘길지 아니면 정보들을 텍스트로 뿌려서 보여줄지는 아직 결정못했습니다만 이건 이글에서 아직 중요한 부분이 아니니 넘어가고,

 

위 내용들을 DB로 표현하고자하는데 현재는 아래 사진과 같이 설계했습니다

1번 사진은 아직 설계가 안되어있구요

detail_Database에는 2번사진의 데이터들이 표현됩니다.

Workout (운동이름, 메모) 와 SetInfo (세트, 무게, 횟수, 무게단위)를

1:N관계로 표현하기위해서 나누어서 저렇게 했습니다..

SetInfo를 Wokrout 안에 전부 다 표현해볼까 했지만 그냥 따로 나누어서 했습니다.

(참고로 4번사진에서는 추가를 누르면 DB에 저장되는게 아니라 그냥 2번화면으로 데이터를 전달하는 식으로 했습니다, 최종적으로 DB에 저장은 운동이 다 추가된후 2번 화면에서 합니다.)

 

 

Workout_list DB에는 3번사진의 내용이 담겨있습니다.

보이실지는 모르겟지만 속성이름이 각 부위 이름으로 되어있고

값은 List<String>타입으로 Converter를 사용해서 운동종류들이 들어가있습니다.

 

---------------------------------

 

이렇게 되어있는 설계를 좀 바꿔볼까하는데 

1. Detail DB와 WorkoutList DB를 하나의 DB로 합친다.

2. 합친후 WorkoutList DB의 테이블을 부위 테이블과 부위별 리스트 테이블 두개로 나눈다.

기존 DB 설계가 이러한데 (부위별 운동은 다른 DB지만 여기서는 하나로 표현했습니다)

 

이렇게 하나의 DB로 만들고 기존 WorkoutList Db의 테이블을 저렇게 둘로 나뉘었습니다.

근데 WorkoutList의 테이블을 두개로 나뉘어서 해야하나 싶기도하고요..

두개로 나누면 몸부위 테이블과 부위별 운동 테이블인데,

몸부위 테이블을 어디다가 쓸수 있을지도 잘모르겠습니다.

 

Detail DB는 동일한데 이건 따로 더 건드려야할지 잘모르겠습니다.. 어렵네요

 

조언좀해주세요

codeslave (3,940 포인트) 님이 2022년 9월 25일 질문
codeslave님이 2022년 9월 25일 수정

1개의 답변

0 추천
DB를 왜 두개 사용하는지 궁금하네요. DB를 두개 사용할 경우, 특히 트랙잭션이 필요할 때는 DB를 두개를 처리해야 하므로 문제가 될 가능성이 있어 보이니 잘 확인해 보시고, 꼭 필요하지 않다면 하나만 사용하시는 것이 나아 보입니다.

제가 생각해본 DB구조는 아래와 같습니다.

 
---------------
몸부위
---------------
id
이름
---------------

---------------
운동종목
---------------
id
이름
몸부위id
---------------

---------------
운동루틴 (필요시)
---------------
id
이름
세트수
횟수
무게
무게단위
운동종목id
---------------

---------------
운동기록
---------------
id
날짜
노트
---------------

---------------
운동세트기록
---------------
id
세트
횟수
무게
무게단위
운동종목id
운동기록id
---------------

먼저, 몸부위와 운동종목 테이블을 님의 구조와 동일하구요. 별도의 설명이 필요없을 것 같습니다.
그리고 3번화면은 운동루틴테이블에 저장하면 될 것 같구요.

4번화면이 좀 복잡한듯 한데, 운동루틴을 가져와서 화면에 입력할 기본값을 보여주고, 사용자가 실제 운동한 기록을 저장하는 테이블이므로 운동기록과 운동세트기록 테이블처럼 구조를 가져가면 어떨까 싶네요.

코드를 먼저 작성하지 마시고 DB explorer 같은 데서 SQL문을 사용해서 테스트 데이터를 저장하고 읽어오는 걸 먼저 해보시면 DB 구조를 검증하는데 도움이 되지 않을까 생각합니다.
spark (227,510 포인트) 님이 2022년 9월 26일 답변
spark님이 2022년 9월 26일 수정
...