sql >> Databáze >  >> RDS >> Database

Datový model aplikace pro maratonský trénink

Sníte o tom, že uběhnete maraton? Podívejme se na datový model pro aplikaci, která by vás mohla přenést z líné pohovky na maratonce.

Co potřebujete k uběhnutí maratonu? Budete potřebovat nadšení a odhodlání. Dobrý pár běžeckých bot. A hodně fyzické přípravy! Řekněme, že máte aplikaci, která vám pomůže přejít od začínajícího běžce až po finišera maratonu. Jak by vypadal datový model?

V tomto článku prozkoumáme datový model aplikace pro trénink maratonu.

Co by měla aplikace pro maratonský trénink dělat?

Každá tréninková aplikace obvykle přichází s některými možnostmi. V tomto případě bychom očekávali, že aplikace bude podporovat trénink na různé typy běhů (celý maraton, půlmaraton, 5k) a na různé tréninkové plány (od osmi do 24 týdnů). Aplikace by zachytila ​​vaše základní údaje, včetně věku, pohlaví a aktuálního stavu běhu. Mělo by vám také umožnit nastavit cíl a datum zahájení. Aplikace tyto informace použije k vytvoření tréninkového plánu pro nadcházející běžeckou událost. Čím více budete ve svém plánu postupovat, tím blíže budete svému cíli.

Pojďme se podívat na klíčové požadavky této aplikace. Mělo by:

  • Během registrace zaznamenejte uživatelské jméno, věk, pohlaví atd.
  • Zobrazení seznamu cílů (např. chůze, běh, jízda na kole atd.) s přidruženou cílovou vzdáleností.
  • Umožněte uživatelům nastavit cíl, cílovou vzdálenost a datum zahájení.
  • Vytvořte podrobný osobní tréninkový plán pro jednotlivé uživatele, který zohlední jejich věk, pohlaví a aktuální kondici. Tento tréninkový plán zahrnuje:
    • Činnosti, jako je běh.
    • Data zahájení a dokončení činností.
    • Vzdálenosti (např. běh na 5 kilometrů)
    • Doporučené tempo (např. 5 km/h) a přibližné časy dokončení (1 hodina).
    • Dny odpočinku. Je důležité zabudovat je do plánu fyzické zdatnosti.
    • Datum ukončení cíle, např. kdy bude uživatel připraven spustit vybranou událost.
  • Zachyťte průběh aktivit tréninkového plánu, včetně toho, kdy (nebo zda) byla každá aktivita zahájena, jak blízko je uživatel k jejímu dokončení a kdy byla dokončena.
  • Upravte tréninkové plány podle potřeby. Běžec může například onemocnět nebo se zranit a nemusí dodržet svůj původní plán; v takovém případě bude nutné původní plán rozšířit nebo upravit.
  • Zachyťte tituly získané uživatelem. Ty jsou v běhu založeny na úspěšně ukončených akcích, např. 5K běžec, 10K běžec, půlmaratónský běžec nebo maratónský běžec. Tyto tituly se získávají, když běžci postupují v tréninku.

Datový model

Datový model podporující takovou aplikaci se skládá ze tří tematických oblastí:

  1. Uživatelé a tituly
  2. Cíle a aktivity
  3. Uživatelské cíle a přechody

Probereme každou oblast v pořadí, v jakém je uvedena.

Předmětová oblast 1:Uživatelé a tituly

Tuto aplikaci využijí nejen začínající běžci. Běžecké akce jsou velmi náročné a namáhavé; i ostřílení maratonci musí trénovat na nadcházející maratony. Nikdo neuběhne celý maraton přes noc nebo po jediném tréninku. Je to postupný proces.

Jak jsme již zmínili dříve, běžci získávají různé tituly na základě událostí různé délky. Jak běžec pokročí v tréninku, bude schopen běhat delší závody a získávat více titulů. Tabulky v této oblasti jsou definovány s ohledem na to.

registered_user ” tabulka obsahuje základní údaje o uživatelích. Tyto podrobnosti jsou zachyceny během procesu registrace. To zahrnuje dva klíčové faktory, které ovlivňují návrh tréninkového plánu:věk (odvozený z date_of_birth ) a pohlaví. Ty jsou důležité, protože různá pohlaví a věkové skupiny trénují odlišně, i když soutěží na stejné akci. 19letý chlapec bude potřebovat jiný tréninkový plán než 45letá žena.

running_event Tabulka obsahuje seznam všech oficiálních běžeckých akcí. To by mohlo zahrnovat mezinárodní akce. Všechna pole jsou samozřejmá.

title Tabulka ” primárně ukládá „pověření“ běžců:vzdálenost, kterou urazí, a čas, který trvala oficiální událost. Klíčové body o titulech a jejich distribucích jsou:

  • Každá maratonská událost má svůj vlastní seznam titulů.
  • Tyto tituly se obvykle udělují běžcům na konci milníku (na trati) nebo když doběhnou (např. protnou cílovou čáru maratonu).
  • Stejný titul může získat více závodníků, pokud všichni splňují jeho podmínky. Patří mezi ně (1) minimální vzdálenost, kterou je třeba překonat, a (2) maximální doba k překonání této vzdálenosti.
  • Pokud jsou tituly definovány v průběžných milnících na trati, závodník si ponechá jediný nejvyšší titul, který získal.

S tímto chápáním názvů by měly být sloupce v tabulce „název“ samozřejmé. ☺

user_title ” tabulka ukládá všechny tituly, které uživatelé získali. Jediný rozdíl je v tom, že zde zachycujeme čas běžce v sekundách místo v minutách.

Věcná oblast 2:Cíle a činnosti

Nikdo vás nemůže motivovat k běhu maratonu, pokud nechcete. Musíte si vypracovat vlastní zápal. Jedním ze způsobů, jak zůstat motivovaný, je stanovit si cíle a dosáhnout jich. Další dva tematické okruhy se zabývají stanovením a plněním cílů.

Nejprve se podíváme na Goals and Activities předmětová oblast. Obsahuje tři tabulky:

  1. goal “ obsahuje podrobnosti o cílech definovaných v aplikaci.
  2. activity “ ukládá informace o různých druzích tréninkových aktivit, jako je chůze, rychlá chůze, běh, plavání, jízda na kole atd.
  3. goal_activity ” ukládá podrobnosti o činnostech potřebných k dosažení cíle.

Je důležité pochopit, že stejného cíle dosahují různí uživatelé různě. Opět bude mít 15letá dívka tréninkový plán a sadu aktivit, které jsou jiné než 40letý muž. S ohledem na tyto skutečnosti jsme do „goal ” tabulka:

  • distance_to_run – Vzdálenost, kterou by měl být běžec schopen uběhnout na konci tohoto cíle.
  • target_time_in_min – Maximální čas potřebný k překonání této vzdálenosti.
  • gender – Pro jaké pohlaví je tento cíl určen.

Cíl lze vytvořit pro věkovou skupinu, řekněme 15-20 nebo 35-40. Způsob, jakým trénujeme, se s přibývajícím věkem trochu mění, a tak jsme do „goal “:

  • starting_age – Minimální věk pro tento cíl.
  • closing_age – Maximální věk pro tento cíl.

Lidé mohou snít ve velkém, ale jediný způsob, jak věci skutečně uskutečnit, je postupovat postupně. Tato aplikace omezuje, jak uživatelé dávají cíle; musí splnit menší, dosažitelné cíle, než se pokusí o ty větší. Povaleč může snít o tom, že uběhne celý maraton 26,2 míle\42,2 km, ale nejprve by měl začít pracovat na běhu na 5 km.

goal ” tabulka zpracovává omezení pomocí následujících sloupců:

  • current_run_distance_per_week – Minimální běžecká vzdálenost dosažená předtím, než si uživatel může stanovit určitý cíl; a
  • current_min_title_id – Minimální počet, který musí uživatelé držet, aby mohli nastavit tento cíl.

Pokud tyto předpoklady nebudou splněny, daný cíl nebude uživateli k dispozici. Oba tyto sloupce však mají hodnotu null; budou některé cíle, které nemají žádné předběžné požadavky na fyzickou zdatnost.

Přejděme k „goal_activity " stůl. Většina těchto sloupců slouží jasnému účelu. Vyjádřím se pouze ke dvěma, počínaje seq_of_day sloupec. Toto je číselný sloupec, který obsahuje hodnoty označující den, kdy má být činnost provedena. Je zřejmé, že tato sekvence začíná od 1 pro jakýkoli cíl. Nikdy nemůže být NULA nebo NULL. Čísla nemusí být pro cíl po sobě jdoucí; to by znamenalo, že byly stanoveny dny odpočinku. Dny, pro které nejsou v této tabulce žádné záznamy, jsou ve skutečnosti dny odpočinku.

Dále máme distance_to_cover sloupec. To je neplatné, protože existují aktivity (jako jóga, strečink a vzpírání), u kterých na vzdálenosti nezáleží. Poté, co bylo řečeno toto, všimněte si, že min_pace a max_pace ve sloupcích „activity ” tabulky mají také hodnotu null.

Předmět č. 3:Uživatelské cíle a přechody

Tato oblast se týká cílů vytvořených uživateli a plánů činností vytvořených aplikací. Zde jsou důležitá aktuální data a seq_of_day ve sloupci „goal_activity ” tabulka hraje hlavní roli v datech plánu vykreslování, stejně jako start_date vybrané uživateli pro jejich cíle.

user_goal “ a „transition_plan ” tabulky jsou většinou samozřejmé. Je zde jen několik sloupců, které bychom měli zvýraznit.

V „user_goal ” tabulka:

  • is_active – Ukazuje, zda uživatel stále postupuje k tomuto cíli. Všechny probíhající cíle budou mít v tomto sloupci „Y“. Tento sloupec umožňuje aplikaci omezit uživatele na nastavení jednoho cíle najednou.
  • create_date – Datum, kdy byl vytvořen cíl.
  • start_date – Datum, kdy byl cíl skutečně zahájen. Nemusí se shodovat s datem vytvoření.
  • expected_end_date – Datum ukončení vypočítané aplikací poté, co pro uživatele vytvoří plán přechodu.
  • actual_end_date – Kdy byl cíl skutečně dokončen. Mohou existovat odchylky od tréninkového plánu, takže tento sloupec potřebujeme k zachycení skutečného data ukončení. Aplikace může poskytnout možnost přeskočit den nebo posunout tréninkový plán o den nebo tak. V takových případech actual_end_date se bude jistě lišit od expected_end_date .

V „transition_plan ” tabulka:

  • is_complete – Označuje, zda byla aktivita přeskočena, ještě nebyla zahájena nebo je dokončena. Bude obsahovat „Y“, „N“ nebo prázdné místo.
  • start_timestamp – Časové razítko, kdy byla aktivita zahájena.
  • end_timestamp – Časové razítko, kdy byla aktivita dokončena.

Protože víme, že v tréninku mohou být mezery (kvůli nemoci, zranění nebo nedostatečné motivaci), tato tabulka obsahuje tři různá data:

  • original_calendar_date – Kalendářní datum označující, kdy je třeba provést aktivitu. Tato hodnota je vyplněna, když aplikace generuje tréninkový plán.
  • planned_calendar_date – Zpočátku zůstane tento sloupec prázdný. Datum se vyplní, když dojde ke změně v tréninkovém plánu.
  • actual_calendar_date – Tento sloupec se vyplní, jakmile uživatel označí aktivitu jako dokončenou. Toto je datum, kdy je aktivita skutečně dokončena.

planned_calendar_date a actual_calendar_date sloupce jsou nulovatelné; nejsou naplněny během počátečního generování plánu.

Další tři sloupce v této tabulce mají hodnotu null, takže tento datový model může zpracovat všechny možné scénáře pro probíhající aktivitu. Zde je několik příkladů:

  • Činnost, která ještě nebyla zahájena –
    • is_complete – NULL
    • start_timestamp – NULL
    • end_timestamp - NULL
  • Aktivita, která byla zahájena, ale nebyla dokončena –
    • is_complete – NULL
    • start_timestamp – VALUE
    • end_timestamp – NULL
  • Aktivita, která byla přeskočena –
    • is_complete – ‘N’
    • start_timestamp – NULL
    • end_timestamp – NULL
  • Činnost, která byla dokončena –
    • is_complete – ‘Y’
    • start_timestamp –VALUE
    • end_timestamp – VALUE

Co byste změnili na tomto datovém modelu?

Trénink na maraton je víc než jen cvičení. Maratonci musí upravit každý aspekt svého životního stylu, počínaje denním příjmem potravy, mentální silou a dokonce i množstvím spánku.

Efektivní aplikace musí být schopna organizovat, plánovat a sledovat všechny aspekty školení. Zaměřuje se náš datový model na všechny tyto aspekty? Jaké změny jsou nutné, aby se z ní stala plnohodnotná školicí aplikace?

Podělte se o své názory a návrhy v sekci komentářů.


  1. Vytváření plánů údržby databáze

  2. Přístup k souborovému DSN z Java

  3. Jak vypočítat rozdíl mezi dvěma časovými razítky v MySQL

  4. Jak připojit programy C++ k MariaDB