Você sonha em correr uma maratona? Vejamos o modelo de dados de um aplicativo que pode levá-lo de um preguiçoso a um maratonista.
O que você precisa para correr uma maratona? Você precisará de entusiasmo e determinação. Um bom par de tênis de corrida. E muito treino físico! Digamos que você tenha um aplicativo que ajuda você a passar de corredor iniciante a finalizador de maratona. Como seria o modelo de dados?
Neste artigo, examinaremos o modelo de dados por trás de um aplicativo de treinamento de maratona.
O que um aplicativo de treinamento de maratona deve fazer?
Qualquer aplicativo de treinamento geralmente vem com algumas opções. Nesse caso, esperamos que o aplicativo suporte treinamento para diferentes tipos de corridas (uma maratona completa, meia maratona, 5k) e para diferentes horários de treinamento (de oito a 24 semanas). O aplicativo capturaria seus detalhes básicos, incluindo idade, sexo e status atual de execução. Também deve permitir que você defina uma meta e uma data de início. O aplicativo usará essas informações para criar um plano de treinamento para seu próximo evento de corrida. Quanto mais você progredir com seu plano, mais próximo estará de seu objetivo.
Vamos examinar os principais requisitos deste aplicativo. Deveria:
- Capture o nome, a idade, o sexo etc. de um usuário durante o processo de registro.
- Exibição de uma lista de metas (por exemplo, caminhada, corrida, ciclismo etc.) com uma distância desejada associada.
- Permita que os usuários definam uma meta, distância alvo e data de início.
- Crie um plano de treinamento pessoal detalhado para usuários individuais que considere sua idade, sexo e nível de condicionamento físico atual. Este plano de treinamento inclui:
- Atividades, como corrida.
- Datas de início e conclusão das atividades.
- Distâncias (por exemplo, corrida de 5 quilômetros)
- Ritmo sugerido (por exemplo, 5 km/h) e tempo aproximado de conclusão (1 hora).
- Dias de descanso. É importante incluí-los em um plano de condicionamento físico.
- Data de término da meta, por exemplo, quando o usuário estiver pronto para executar o evento escolhido.
- Capture o progresso das atividades do plano de treinamento, incluindo quando (ou se) cada atividade foi iniciada, quão perto o usuário está de concluí-la e quando foi concluída.
- Ajuste os planos de treinamento conforme necessário. Por exemplo, um corredor pode ficar doente ou lesionado e não seguir seu cronograma original; nesse caso, o plano original precisará ser estendido ou modificado.
- Capturar títulos ganhos pelo usuário. Na execução, eles são baseados em eventos concluídos com sucesso, por exemplo. Corredor de 5 km, corredor de 10 km, corredor de meia maratona ou corredor de maratona completa. Esses títulos são conquistados à medida que os corredores progridem no treinamento.
O modelo de dados
O modelo de dados que suporta esse aplicativo consiste em três áreas de assunto:
- Usuários e títulos
- Metas e atividades
- Metas e transições do usuário
Discutiremos cada área de assunto na ordem em que está listada.
Área de Assunto 1:Usuários e Títulos
Este aplicativo será usado por mais do que apenas corredores iniciantes. Os eventos de corrida são muito exigentes e extenuantes; até maratonistas experientes precisam treinar para as próximas maratonas. Ninguém corre uma maratona completa da noite para o dia ou depois de um único curso de treinamento. É um processo gradativo.
Como mencionamos anteriormente, os corredores ganham vários títulos com base em eventos de diferentes durações. À medida que o corredor progride em seu treinamento, ele poderá realizar eventos mais longos e ganhar mais títulos. As tabelas nesta área de assunto são definidas com isso em mente.
O “registered_user
” contém detalhes básicos sobre os usuários. Esses detalhes são capturados durante o processo de registro. Isso inclui dois fatores principais que influenciam o design do plano de treinamento:idade (derivada de date_of_birth
) e gênero. Isso é importante porque diferentes gêneros e faixas etárias treinam de forma diferente, mesmo que estejam competindo no mesmo evento. Um garoto de 19 anos precisará de um plano de treinamento diferente de uma mulher de 45 anos.
O “running_event
” armazena uma lista de todos os eventos oficiais de corrida. Isso pode incluir eventos internacionais. Todos os campos são autoexplicativos.
O “title
” armazena principalmente as “credenciais” dos corredores:a distância percorrida e o tempo que levou durante um evento oficial. Pontos-chave sobre títulos e suas distribuições são:
- Cada evento de maratona tem sua própria lista de títulos.
- Geralmente, esses títulos são dados aos corredores no final de um marco (em uma pista) ou quando eles terminam (por exemplo, cruzar a linha de chegada de uma maratona).
- O mesmo título pode ser dado a vários corredores, desde que todos atendam às suas condições. Isso inclui (1) a distância mínima a ser percorrida e (2) o tempo máximo para cobrir essa distância.
- Se os títulos forem definidos em marcos intermediários em uma pista, o corredor mantém o único título mais alto que conquistou.
Com essa compreensão dos títulos, as colunas da tabela “título” devem ser autoexplicativas. ☺
O “
user_title
” armazena todos os títulos que os usuários ganharam. A única diferença é que aqui capturamos o tempo do corredor em segundos em vez de minutos. Área de Assunto 2:Objetivos e Atividades
Ninguém pode motivá-lo a correr uma maratona se você não quiser. Você tem que desenvolver seu próprio zelo. Uma maneira de se manter motivado é definir e atingir metas. As próximas duas áreas temáticas tratam do estabelecimento e cumprimento de metas.
Primeiro, veremos as Goals and Activities
área de estudo. Contém três tabelas:
- “
goal
” contém detalhes sobre as metas definidas no aplicativo. - “
activity
” armazena informações sobre vários tipos de atividades de treinamento, como caminhada, caminhada rápida, corrida, natação, ciclismo etc. - “
goal_activity
” armazena detalhes sobre as atividades necessárias para atingir uma meta.
É importante entender que o mesmo objetivo é alcançado de forma diferente por usuários diferentes. Novamente, uma garota de 15 anos terá um plano de treinamento e um conjunto de atividades diferentes de um homem de 40 anos. Considerando esses fatos, colocamos as seguintes colunas na seção “
goal
" tabela:distance_to_run
– A distância que um corredor deve ser capaz de percorrer ao final desta meta.target_time_in_min
– O tempo máximo necessário para cobrir esta distância.gender
– Para qual gênero essa meta se destina.
Uma meta pode ser criada para uma faixa etária, digamos 15-20 ou 35-40. A forma como treinamos muda um pouco à medida que envelhecemos, então adicionamos mais duas colunas a "
goal
”:starting_age
– A idade mínima para esta meta.closing_age
– A idade máxima para esta meta.
As pessoas podem sonhar grande, mas a única maneira de realmente fazer as coisas acontecerem é progredir gradualmente. Este aplicativo restringe como os usuários fazem metas; eles devem completar objetivos menores e alcançáveis antes de tentar os maiores. Um viciado em sofá pode sonhar em correr uma maratona completa de 42,2 km, mas deve começar a trabalhar para uma corrida de 5 km primeiro.
A “
goal
” trata das restrições por meio das seguintes colunas:current_run_distance_per_week
– A distância mínima de corrida alcançada antes que um usuário possa definir uma determinada meta; ecurrent_min_title_id
– O título mínimo que os usuários devem ter para definir essa meta.
Se esses pré-requisitos não forem atendidos, essa meta não estará disponível para o usuário. No entanto, ambas as colunas são anuláveis; haverá alguns objetivos que não têm pré-requisitos de condicionamento físico.
Vamos passar para o "
goal_activity
" tabela. A maioria dessas colunas serve a um propósito óbvio. Vou comentar apenas dois, começando com o seq_of_day
coluna. Esta é uma coluna numérica que contém valores que significam o dia em que uma atividade deve ser realizada. Obviamente, esta sequência começa em 1 para qualquer objetivo. Nunca pode ser ZERO ou NULL. Os números podem não ser consecutivos para um gol; isso significaria que os dias de descanso foram definidos. Os dias para os quais não há registros nesta tabela são, na verdade, dias de descanso. Em seguida, temos o
distance_to_cover
coluna. Isso é anulável, pois existem atividades (como ioga, alongamento e levantamento de peso) em que a distância não importa. Dito isso, observe que o min_pace
e max_pace
colunas na seção “activity
” também são anuláveis. Área de assunto nº 3:Metas e transições do usuário
Esta área de assunto é sobre metas criadas pelo usuário e planos de atividade criados pelo aplicativo. As datas reais são importantes aqui, e o
seq_of_day
coluna na coluna "goal_activity
” desempenha um papel importante na renderização das datas do plano, assim como a start_date
escolhidos pelos usuários para seus objetivos.
O “user_goal
” e “transition_plan
” tabelas são em sua maioria autoexplicativas. Há apenas algumas colunas que devemos destacar.
Na seção “user_goal
" tabela:
is_active
– Mostra se um usuário ainda está progredindo nesta meta. Todas as metas em andamento teriam um 'Y' nesta coluna. Essa coluna permite que o aplicativo restrinja os usuários a definir uma meta por vez.create_date
– A data em que uma meta foi criada.start_date
– A data em que uma meta foi realmente iniciada. Pode não ser o mesmo que create_date.expected_end_date
– Uma data de término, calculada pelo aplicativo depois que ele faz um plano de transição para o usuário.actual_end_date
– Quando o objetivo foi realmente concluído. Pode haver desvios do plano de treinamento, portanto, precisamos dessa coluna para capturar a data de término real. O aplicativo pode dar a opção de pular um dia ou adiantar a programação de treinamento em um dia ou mais. Nesses casos, oactual_end_date
certamente será diferente daexpected_end_date
.
No “
transition_plan
" tabela:is_complete
– Indica se uma atividade foi ignorada, ainda não foi iniciada ou foi concluída. Ele conterá um 'Y', 'N' ou um espaço em branco.start_timestamp
– O carimbo de data/hora em que uma atividade foi iniciada.end_timestamp
– O carimbo de data/hora em que a atividade foi concluída.
Como entendemos que pode haver lacunas no treinamento (por doença, lesão ou falta de motivação), esta tabela contém três datas diferentes:
original_calendar_date
– Uma data de calendário indicando quando uma atividade precisa ser realizada. Esse valor é preenchido quando o aplicativo gera um plano de treinamento.planned_calendar_date
– Inicialmente, esta coluna permanece em branco. Uma data é preenchida à medida que uma alteração é feita no plano de treinamento.actual_calendar_date
– Esta coluna é preenchida assim que o usuário marca uma atividade como concluída. Esta é a data em que a atividade é realmente concluída.
O
planned_calendar_date
e actual_calendar_date
as colunas são anuláveis; eles não são preenchidos durante a geração inicial do plano. Outras três colunas nesta tabela são anuláveis para que este modelo de dados possa lidar com todos os cenários possíveis para uma atividade em andamento. aqui estão alguns exemplos:
- Uma atividade que ainda não foi iniciada –
is_complete
– NULOstart_timestamp
– NULOend_timestamp
- NULO- Uma atividade que foi iniciada, mas não concluída –
- is_complete – NULL
- start_timestamp – VALUE
- end_timestamp - NULL
- Uma atividade que foi ignorada –
- is_complete – 'N'
- start_timestamp – NULL
- end_timestamp - NULL
- Uma atividade que foi concluída –
- is_complete – 'S'
- start_timestamp –VALUE
- end_timestamp - VALUE
O que você mudaria neste modelo de dados?
Treinar para uma maratona é mais do que apenas exercício. Os maratonistas precisam ajustar todos os aspectos de seu estilo de vida, começando pela ingestão diária de alimentos, sua força mental e até a quantidade de sono que dormem.
Um aplicativo eficaz deve ser capaz de organizar, planejar e acompanhar todos os aspectos do treinamento. Nosso modelo de dados atende a todos esses aspectos? Quais mudanças são necessárias para torná-lo um aplicativo de treinamento completo?
Por favor, compartilhe suas opiniões e sugestões na seção de comentários.