Progettazione di un database di routine fitness / sollevamento pesi

5

Vorrei creare un'app simile a Barbell Pro per Android, per scopi di pratica / interesse / istruzione in realtà. O anche come un altro esempio per scopi di database, Fitocracy

Il problema è che non ho idea di come possa essere progettato il database ... Ad esempio:

  • Abbiamo 1000 persone che utilizzano l'app
  • Ogni persona potrebbe avere 1-7 sessioni di allenamento individualizzate, a seconda del giorno. (Forse anche più - > allenamenti AM / allenamenti PM)
  • Ogni WorkoutRoutine ha una serie individuale di Esercizi, con alcuni crossover ad es. qualcuno potrebbe fare Bench Press il lunedì e il venerdì dopotutto.
  • Ogni esercizio ha un numero di set
  • Ogni Set ha un numero di Reps

Ora per me, sembra che potrebbe potenzialmente essere una grande quantità di informazioni da memorizzare per ogni persona, e forse è piuttosto complicato farlo.

Ho solo una certa esperienza con i database relazionali e non so come andrei a progettarlo in modo efficiente per un database relazionale.

Non sto chiedendo un disegno, solo come inizierei a farlo. La potenziale complessità è scoraggiante per me a causa della mancanza di esperienza nel database.

Forse non è nemmeno così complicato, ma come dico, l'ignoranza da me stesso.

    
posta MRabRabbit 31.01.2014 - 05:12
fonte

4 risposte

8

Ecco uno schema di database prototipo. Permette la creazione di diverse routine di esercizi, assegna le routine a una persona per data e ha anche un posto per registrare gli esercizi eseguiti e il numero di ripetizioni.

    
risposta data 31.01.2014 - 05:51
fonte
8

Non progettare il database prima. Se sembra scoraggiante cercare di capire tutte le variabili e le tabelle che ti serviranno in base allo schema iniziale, è un segno che potresti essere avvicinando il problema da sbagliato direttamente.

Invece, progetta il tuo database quando hai qualcosa da memorizzare , in particolare qualcosa che vorresti riassumere o interrogare per quest'ultimo. Potresti scoprire che basta scrivere JSON o XML su disco poiché i file di testo saranno tutto ciò di cui hai bisogno. In alternativa, è possibile memorizzare un BLOB XML o JSON per ogni routine e consentire che le routine vengano interrogate, aggiunte e riepilogate. Oppure, potresti scoprire che XML e JSON sono più problemi che valgono, e in realtà hai solo bisogno di alcune tabelle relazionali.

Se hai già scaricato l'applicazione client e vuoi lavorare su un server database che memorizzerà tutte le informazioni per i client di un centro fitness, procedi come segue:

  1. Identifica ciò che deve essere effettivamente elencato e interrogato . Come ho accennato prima, se non hai intenzione di eseguire una query sui dati grezzi, una serializzazione JSON o XML degli oggetti dati in Java potrebbe essere la soluzione migliore. (Ricorda che, se il file è troppo grande per rientrare in una CHAR , puoi sempre memorizzare il testo in un campo "memo" o "blob", a seconda del tuo database.)
  2. Cerca informazioni ripetute , dove più di un singolo campo può essere collegato insieme in qualche oggetto dedotto, ovvero sposta due o più campi in una tabella separata che avrebbe un numero pari a -una relazione con la loro provenienza. Quello che hai elencato nella domanda è un buon inizio, anche se potresti trovare di più o scoprire che hai reso il tuo schema troppo complesso.
  3. Per ogni tabella, determina una chiave univoca corretta che sarà immutabile e unica per tutti i record. Non aver paura di creare chiavi virtuali tramite identità o meccanismi simili. E non ossessionare ancora le prestazioni; se una chiave naturale sembra migliore di una chiave virtuale, vai avanti e usala.
  4. Assegna a ogni campo e tabella un nome chiaro e distinto. I nomi delle chiavi devono essere univoci in tutto il database, anche se i campi secondari non devono essere necessariamente. (Anche se, naturalmente, non c'è nulla di male nel vederli così.)
  5. Con tutto quanto precede, fai un progetto iniziale del database . Vuoi ottenere alcune tabelle in cui puoi inviare alcuni dati di esempio e compilare alcuni buoni dati di test.
  6. Una volta terminato il database, codifica il livello di accesso ai dati della tua applicazione, che legge i dati nel modulo nativo dell'app e invia detto modulo nativo in un modo che il database può accettare.
  7. Dopo che hai funzionato il codice e puoi scrivere dati appropriati e recuperare i record che ti aspettavi, carica il tuo database di sviluppo con dati di esempio . Questo può essere completamente fittizio o informazioni dai beta tester o una combinazione di entrambi. Sentiti libero di buttare lì dati di alcuni anni di dati attesi. O altro.
  8. Con un database le cui tabelle contengono alcuni dati sostanziosi, ottimizza il database . Potrebbe essere necessario aggiungere o regolare le chiavi, ridimensionare alcune tabelle in viste normalizzate o modificare i tipi di dati di alcuni campi. I numeri e la testabilità sono tuoi amici e dovrebbero essere la tua guida.

Non aver paura se ti ritrovi a fare un passo indietro, oa metterli fuori uso. Mantenere il database come fornitore indipendente dal punto di vista dei costi, quindi, se necessario, è possibile passare da SQLite a MonoDB a MSSQL come richiesto dal progetto.

Bonus Rant

Qualunque cosa tu faccia, e non posso sottolineare questo abbastanza se non hai familiarità con i database relazionali, TENERE LE TAVOLE NARROW . Non aggiungere campi come set1Reps e set2Reps alla stessa tabella; questo è un mal di testa di un odore di codice e un enorme segno che dovresti avere un campo XML o JSON interno per archiviare i dati asimmetrici o sottotabelle chiare e distinte.

Se per qualche motivo ti trovi a desiderare un recordset molto ampio in modo da poterlo semplicemente scorrere tra i suoi campi e assegnarli a un singolo oggetto di dati, puoi sempre farlo tramite una Vista e qualche SQL intelligente. Ma in tal caso, saresti molto più bravo con la serializzazione e la non serializzazione di molti dei tuoi oggetti dati.

    
risposta data 31.01.2014 - 09:34
fonte
2

Non iniziare a progettare dal database. Ti chiuderai in uno schema completamente sbagliato, una volta capito chi lo usa e come. Inizia con i requisiti, scrivi test che li provano, scrivi il codice che supera i test e lascia che lo schema cali il fondo.

Potresti decidere, dopo alcune iterazioni di sviluppo, che JSON / MongoDB è migliore per le tue esigenze. Oppure potresti trovare uno schema eccellente già scritto per te. Oppure potresti decidere che l'archiviazione locale HTML5 è tutto ciò che ti serve.

Per un'applicazione greenfields (nuova), lo schema è un dettaglio di implementazione. Non preoccuparti per questo.

    
risposta data 31.01.2014 - 06:53
fonte
1

I miei due centesimi:

  • Supporta i formatori
  • Supporta chi ha creato un piano
  • Supporta chi ha creato una routine
  • Un piano per esercitarsi è composto da diverse routine da eseguire durante un numero di settimane
  • Ogni esercizio ha un giorno preferito
  • Una persona può eseguire molti piani di allenamento durante la sua vita e un piano di esercizio può essere eseguito da molte persone

    
risposta data 26.08.2016 - 16:40
fonte

Leggi altre domande sui tag