Database
 sql >> Database >  >> RDS >> Database

Un modello di dati dell'app di allenamento per la maratona

Sogni di correre una maratona? Diamo un'occhiata al modello di dati per un'app che potrebbe portarti da pigro pantofolaio a maratoneta.

Di cosa hai bisogno per correre una maratona? Avrai bisogno di entusiasmo e determinazione. Un buon paio di scarpe da corsa. E tanto allenamento fisico! Diciamo che hai un'app che ti aiuta a passare da corridore principiante a corridore di maratona. Come sarebbe il modello di dati?

In questo articolo, esamineremo il modello di dati alla base di un'app di allenamento per la maratona.

Cosa dovrebbe fare un'app di allenamento per la maratona?

Qualsiasi app di allenamento di solito include alcune opzioni. In questo caso, ci aspetteremmo che l'app supporti l'allenamento per diversi tipi di corsa (una maratona completa, una mezza maratona, una 5k) e per diversi programmi di allenamento (ovunque da 8 a 24 settimane). L'app acquisirà i tuoi dettagli di base, inclusi età, sesso e stato attuale della corsa. Dovrebbe anche consentire di impostare un obiettivo e una data di inizio. L'app utilizzerà queste informazioni per creare un piano di allenamento per il tuo prossimo evento di corsa. Più avanzi con il tuo piano, più vicino saresti al tuo obiettivo.

Esaminiamo i requisiti chiave di questa app. Dovrebbe:

  • Acquisisci il nome, l'età, il sesso e così via di un utente durante il processo di registrazione.
  • Visualizza un elenco di obiettivi (ad es. camminare, correre, andare in bicicletta, ecc.) con una distanza target associata.
  • Consenti agli utenti di impostare un obiettivo, una distanza target e una data di inizio.
  • Crea un piano di allenamento personale dettagliato per i singoli utenti che tenga conto della loro età, sesso e livello di forma fisica attuale. Questo piano di formazione include:
    • Attività, come la corsa.
    • Date per l'inizio e il completamento delle attività.
    • Distanze (ad es. correndo per 5 chilometri)
    • Velocità consigliata (ad es. 5 km/h) e tempi di completamento approssimativi (1 ora).
    • Giorni di riposo. È importante integrarli in un piano di fitness fisico.
    • Data di fine dell'obiettivo, ad es. quando l'utente sarà pronto per eseguire l'evento scelto.
  • Cattura lo stato di avanzamento delle attività del piano di formazione, incluso quando (o se) ciascuna attività è stata avviata, quanto è vicino all'utente per completarla e quando è stata completata.
  • Adegua i piani di allenamento secondo necessità. Ad esempio, un corridore potrebbe ammalarsi o infortunarsi e potrebbe non seguire il proprio programma originale; in tal caso, il piano originario dovrà essere esteso o modificato.
  • Acquisisci i titoli guadagnati dall'utente. In esecuzione, questi si basano su eventi completati con successo, ad es. Corridore 5K, corridore 10K, corridore di mezza maratona o maratoneta completo. Questi titoli vengono guadagnati man mano che i corridori progrediscono con il loro allenamento.

Il modello dei dati

Il modello di dati che supporta tale app è composto da tre aree tematiche:

  1. Utenti e titoli
  2. Obiettivi e attività
  3. Obiettivi utente e transizioni

Discuteremo ogni area tematica nell'ordine in cui è elencata.

Area tematica 1:Utenti e titoli

Questa app sarà utilizzata da più di semplici corridori alle prime armi. Gli eventi di corsa sono molto impegnativi e faticosi; anche i maratoneti più esperti devono allenarsi per le prossime maratone. Nessuno corre un'intera maratona durante la notte o dopo un solo corso di formazione. È un processo graduale.

Come accennato in precedenza, i corridori guadagnano vari titoli in base a eventi di diversa durata. Man mano che un corridore avanza nell'allenamento, sarà in grado di organizzare eventi più lunghi e guadagnare più titoli. Le tabelle in questa area tematica sono definite tenendo conto di ciò.

Il "registered_user La tabella contiene i dettagli di base sugli utenti. Questi dettagli vengono acquisiti durante il processo di registrazione. Ciò include due fattori chiave che influenzano la progettazione del piano di formazione:l'età (derivata da date_of_birth ) e sesso. Questi sono importanti perché generi e gruppi di età diversi si allenano in modo diverso, anche se gareggiano nello stesso evento. Un ragazzo di 19 anni avrà bisogno di un piano di allenamento diverso rispetto a una donna di 45 anni.

Il "running_event La tabella memorizza un elenco di tutti gli eventi ufficiali in corso. Ciò potrebbe includere eventi internazionali. Tutti i campi sono autoesplicativi.

Il “title La tabella memorizza principalmente le "credenziali" dei corridori:la distanza che percorrono e il tempo impiegato durante un evento ufficiale. I punti chiave sui titoli e la loro distribuzione sono:

  • Ogni evento di maratona ha il proprio elenco di titoli.
  • Di solito questi titoli vengono assegnati ai corridori al termine di un traguardo (su una pista) o quando finiscono (ad es. tagliano il traguardo di una maratona).
  • Lo stesso titolo può essere assegnato a più corridori, a condizione che tutti soddisfino le sue condizioni. Questi includono (1) la distanza minima da coprire e (2) il tempo massimo per coprire questa distanza.
  • Se i titoli sono definiti a traguardi intermedi su una pista, il corridore mantiene l'unico titolo più alto che ha guadagnato.

Con questa comprensione dei titoli, le colonne nella tabella "titolo" dovrebbero essere autoesplicative. ☺

Il "user_title ” la tabella memorizza tutti i titoli che gli utenti hanno guadagnato. L'unica differenza è che qui catturiamo il tempo del corridore in secondi anziché in minuti.

Area tematica 2:obiettivi e attività

Nessuno può motivarti a correre una maratona se non vuoi. Devi coltivare il tuo zelo. Un modo per rimanere motivati ​​è fissare e raggiungere obiettivi. Le prossime due aree tematiche riguardano la definizione e il raggiungimento degli obiettivi.

Per prima cosa, esamineremo Goals and Activities argomento. Contiene tre tabelle:

  1. "goal ” contiene dettagli sugli obiettivi definiti nell'app.
  2. activity ” memorizza informazioni su vari tipi di attività di allenamento, come camminata, camminata veloce, corsa, nuoto, ciclismo, ecc.
  3. "goal_activity ” memorizza i dettagli sulle attività necessarie per raggiungere un obiettivo.

È importante capire che lo stesso obiettivo viene raggiunto in modo diverso da utenti diversi. Ancora una volta, una ragazza di 15 anni avrà un piano di allenamento e una serie di attività diverse da un uomo di 40 anni. Considerando questi fatti, abbiamo inserito le seguenti colonne in "goal ” tabella:

  • distance_to_run – La distanza che un corridore dovrebbe essere in grado di percorrere alla fine di questo obiettivo.
  • target_time_in_min – Il tempo massimo necessario per coprire questa distanza.
  • gender – A quale genere si rivolge questo obiettivo.

Un obiettivo può essere creato per una fascia di età, diciamo 15-20 o 35-40. Il modo in cui ci alleniamo cambia un po' con l'avanzare dell'età, quindi abbiamo aggiunto altre due colonne a "goal ”:

  • starting_age – L'età minima per questo obiettivo.
  • closing_age – L'età massima per questo obiettivo.

Le persone possono sognare in grande, ma l'unico modo per far accadere davvero le cose è progredire gradualmente. Questa app limita il modo in cui gli utenti stabiliscono gli obiettivi; devono completare obiettivi più piccoli e realizzabili prima di provare quelli più grandi. Un pantofolaio può sognare di correre una maratona completa di 26,2 miglia\42,2 km, ma dovrebbe prima iniziare a lavorare per una corsa di 5 km.

L'“goal ” la tabella gestisce le restrizioni per mezzo delle seguenti colonne:

  • current_run_distance_per_week – La distanza minima di corsa raggiunta prima che un utente possa fissare un determinato obiettivo; e
  • current_min_title_id – Il titolo minimo che gli utenti devono possedere per impostare questo obiettivo.

Se questi prerequisiti non vengono soddisfatti, l'obiettivo non sarà disponibile per l'utente. Tuttavia, entrambe queste colonne sono annullabili; ci saranno alcuni obiettivi che non hanno requisiti di fitness prerequisiti.

Passiamo al "goal_activity " tavolo. La maggior parte di queste colonne ha uno scopo ovvio. Ne commenterò solo due, iniziando con il seq_of_day colonna. Questa è una colonna numerica che contiene valori che indicano il giorno in cui deve essere eseguita un'attività. Ovviamente, questa sequenza parte da 1 per qualsiasi goal. Non può mai essere ZERO o NULL. I numeri potrebbero non essere consecutivi per un obiettivo; questo significherebbe che i giorni di riposo sono stati fissati. I giorni per i quali non sono presenti record in questa tabella sono in realtà giorni di riposo.

Successivamente, abbiamo la distance_to_cover colonna. Questo è nulla, poiché ci sono attività (come yoga, stretching e sollevamento pesi) in cui la distanza non ha importanza. Detto questo, nota che il min_pace e max_pace colonne in "activity ” sono anche annullabili.

Area tematica n. 3:obiettivi utente e transizioni

Questa area tematica riguarda gli obiettivi creati dagli utenti e i piani di attività creati dall'app. Le date effettive sono importanti qui e il seq_of_day colonna nella "goal_activity La tabella ” gioca un ruolo importante nel rendering delle date del piano, così come la start_date scelti dagli utenti per i loro obiettivi.

Il "user_goal ” e “transition_plan ” le tabelle sono per lo più autoesplicative. Ci sono solo alcune colonne che dovremmo evidenziare.

In "user_goal ” tabella:

  • is_active – Mostra se un utente sta ancora procedendo verso questo obiettivo. Tutti gli obiettivi in ​​corso avrebbero una "Y" in questa colonna. Questa colonna consente all'app di limitare gli utenti a impostare un obiettivo alla volta.
  • create_date – La data in cui è stato creato un obiettivo.
  • start_date – La data in cui un obiettivo è stato effettivamente avviato. Potrebbe non essere uguale a create_date.
  • expected_end_date – Una data di fine, calcolata dall'app dopo aver elaborato un piano di transizione per l'utente.
  • actual_end_date – Quando l'obiettivo è stato effettivamente completato. Possono esserci deviazioni dal piano di formazione, quindi abbiamo bisogno di questa colonna per acquisire la data di fine effettiva. L'app può offrire un'opzione per saltare un giorno o per far avanzare il programma di allenamento di circa un giorno. In questi casi, il actual_end_date sarà sicuramente diverso dalla expected_end_date .

Nel "transition_plan ” tabella:

  • is_complete – Indica se un'attività è stata ignorata, non è stata ancora avviata o è terminata. Conterrà una "Y", una "N" o uno spazio vuoto.
  • start_timestamp – Il timestamp in cui è stata avviata un'attività.
  • end_timestamp – Il timestamp di completamento dell'attività.

Poiché comprendiamo che possono esserci delle lacune nella formazione (dovute a malattia, infortunio o mancanza di motivazione), questa tabella contiene tre date diverse:

  • original_calendar_date – Una data di calendario che indica quando è necessario eseguire un'attività. Questo valore viene compilato quando l'app genera un piano di formazione.
  • planned_calendar_date – Inizialmente, questa colonna rimane vuota. Viene compilata una data quando e quando viene apportata una modifica al piano di formazione.
  • actual_calendar_date – Questa colonna viene compilata non appena l'utente contrassegna un'attività come completata. Questa è la data in cui l'attività è effettivamente terminata.

La planned_calendar_date e actual_calendar_date le colonne sono annullabili; non vengono popolati durante la generazione iniziale del piano.

Altre tre colonne in questa tabella sono annullabili in modo che questo modello di dati possa gestire tutti i possibili scenari per un'attività in corso. Ecco alcuni esempi:

  • Un'attività che non è ancora iniziata –
    • is_complete – NULLO
    • start_timestamp – NULLO
    • end_timestamp - NULLO
  • Un'attività iniziata ma non completata –
    • è_completo – NULL
    • timestamp_inizio – VALORE
    • end_timestamp - NULL
  • Un'attività che è stata ignorata –
    • è_completo – 'N'
    • inizio_timestamp – NULL
    • end_timestamp - NULL
  • Un'attività che è stata completata –
    • è_completo – 'Y'
    • timestamp_inizio –VALORE
    • end_timestamp - VALUE

Cosa cambieresti di questo modello di dati?

L'allenamento per una maratona non è solo esercizio. I maratoneti devono modificare ogni aspetto del loro stile di vita, a partire dall'assunzione quotidiana di cibo, dalla loro forza mentale e persino dalla quantità di sonno che ottengono.

Un'app efficace deve essere in grado di organizzare, pianificare e tenere traccia di tutti gli aspetti della formazione. Il nostro modello di dati soddisfa tutti questi aspetti? Quali modifiche sono necessarie per renderla un'app di formazione a tutti gli effetti?

Si prega di condividere le vostre opinioni e suggerimenti nella sezione commenti.