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

Ein Datenmodell der Marathon-Trainings-App

Träumen Sie davon, einen Marathon zu laufen? Sehen wir uns das Datenmodell für eine App an, die Sie vom faulen Stubenhocker zum Marathonläufer machen könnte.

Was braucht man, um einen Marathon zu laufen? Sie brauchen Enthusiasmus und Entschlossenheit. Ein gutes Paar Laufschuhe. Und viel körperliches Training! Nehmen wir an, Sie haben eine App, die Ihnen dabei hilft, vom Anfänger zum Marathon-Finisher zu werden. Wie würde das Datenmodell aussehen?

In diesem Artikel untersuchen wir das Datenmodell hinter einer Marathon-Trainings-App.

Was sollte eine Marathon-Trainings-App leisten?

Jede Trainings-App verfügt normalerweise über einige Optionen. In diesem Fall erwarten wir, dass die App das Training für verschiedene Arten von Läufen (einen vollen Marathon, einen Halbmarathon, einen 5-km-Lauf) und für verschiedene Trainingspläne (zwischen acht und 24 Wochen) unterstützt. Die App würde Ihre grundlegenden Details erfassen, einschließlich Alter, Geschlecht und aktuellem Laufstatus. Es sollte Ihnen auch ermöglichen, ein Ziel und ein Startdatum festzulegen. Die App verwendet diese Informationen, um einen Trainingsplan für Ihre bevorstehende Laufveranstaltung zu erstellen. Je weiter Sie mit Ihrem Plan vorankommen, desto näher kommen Sie Ihrem Ziel.

Lassen Sie uns die wichtigsten Anforderungen dieser App durchgehen. Es sollte:

  • Erfassen Sie den Namen, das Alter, das Geschlecht usw. eines Benutzers während des Registrierungsprozesses.
  • Anzeige einer Liste von Zielen (z. B. Gehen, Laufen, Radfahren usw.) mit einer zugehörigen Zielentfernung.
  • Benutzern erlauben, ein Ziel, eine Zielentfernung und ein Startdatum festzulegen.
  • Erstellen Sie einen detaillierten persönlichen Trainingsplan für einzelne Benutzer, der Alter, Geschlecht und aktuelles Fitnessniveau berücksichtigt. Dieser Trainingsplan beinhaltet:
    • Aktivitäten wie Laufen.
    • Daten für den Beginn und Abschluss von Aktivitäten.
    • Distanzen (z. B. 5 Kilometer Laufen)
    • Empfohlenes Tempo (z. B. 5 km/h) und ungefähre Abschlusszeit (1 Stunde).
    • Ruhetage. Es ist wichtig, diese in einen Fitnessplan einzubauen.
    • Enddatum des Ziels, z. B. wann der Benutzer bereit wäre, das von ihm gewählte Ereignis auszuführen.
  • Erfassen Sie den Fortschritt von Trainingsplanaktivitäten, einschließlich wann (oder ob) jede Aktivität begonnen wurde, wie nahe der Benutzer am Abschluss ist und wann sie beendet wurde.
  • Passen Sie Trainingspläne nach Bedarf an. Beispielsweise könnte ein Läufer krank oder verletzt werden und seinen ursprünglichen Zeitplan nicht einhalten; in diesem Fall muss der ursprüngliche Plan erweitert oder geändert werden.
  • Erfassen Sie vom Benutzer erworbene Titel. Beim Running basieren diese auf erfolgreich absolvierten Events, z.B. 5-km-Läufer, 10-km-Läufer, Halbmarathonläufer oder Vollmarathonläufer. Diese Titel werden verdient, wenn Läufer in ihrem Training Fortschritte machen.

Das Datenmodell

Das Datenmodell, das eine solche App unterstützt, besteht aus drei Themenbereichen:

  1. Benutzer und Titel
  2. Ziele und Aktivitäten
  3. Nutzerziele und -übergänge

Wir werden jeden Themenbereich in der angegebenen Reihenfolge besprechen.

Themenbereich 1:Benutzer und Titel

Diese App wird nicht nur von Anfängern verwendet. Laufveranstaltungen sind sehr anspruchsvoll und anstrengend; Selbst erfahrene Marathonläufer müssen für bevorstehende Marathons trainieren. Niemand läuft einen ganzen Marathon über Nacht oder nach einem einzigen Trainingskurs. Es ist ein schrittweiser Prozess.

Wie wir bereits erwähnt haben, verdienen sich Läufer verschiedene Titel basierend auf Events unterschiedlicher Länge. Wenn ein Läufer in seinem Training Fortschritte macht, kann er längere Events laufen und mehr Titel verdienen. Die Tabellen in diesem Themenbereich sind entsprechend definiert.

Der „registered_user ”-Tabelle enthält grundlegende Details zu Benutzern. Diese Daten werden während des Registrierungsprozesses erfasst. Dazu gehören zwei Schlüsselfaktoren, die das Design des Trainingsplans beeinflussen:Alter (abgeleitet von date_of_birth ) und Geschlecht. Diese sind wichtig, da unterschiedliche Geschlechter und Altersgruppen unterschiedlich trainieren, selbst wenn sie an der gleichen Veranstaltung teilnehmen. Ein 19-jähriger Junge braucht einen anderen Trainingsplan als eine 45-jährige Frau.

Das „running_event ”-Tabelle speichert eine Liste aller offiziellen Laufveranstaltungen. Dazu können auch internationale Veranstaltungen gehören. Alle Felder sind selbsterklärend.

Der „title “-Tabelle speichert in erster Linie die „Ausweisdaten“ von Läufern:die Distanz, die sie zurückgelegt haben, und die Zeit, die sie während einer offiziellen Veranstaltung benötigt haben. Wichtige Punkte zu Titeln und ihren Distributionen sind:

  • Jede Marathonveranstaltung hat ihre eigene Titelliste.
  • Normalerweise werden diese Titel Läufern am Ende eines Meilensteins (auf einer Strecke) oder bei der Zielankunft (z. B. beim Überqueren der Ziellinie eines Marathons) verliehen.
  • Derselbe Titel kann mehreren Läufern verliehen werden, sofern alle seine Bedingungen erfüllen. Dazu gehören (1) die zurückzulegende Mindeststrecke und (2) die maximale Zeit, um diese Strecke zurückzulegen.
  • Wenn Titel an Zwischenmeilensteinen auf einer Strecke definiert werden, behält der Läufer den einzigen höchsten Titel, den er verdient hat.

Mit diesem Verständnis von Titeln sollten die Spalten in der Tabelle „Titel“ selbsterklärend sein. ☺

Der „user_title ”-Tabelle speichert alle Titel, die Benutzer verdient haben. Der einzige Unterschied besteht darin, dass wir hier die Zeit des Läufers in Sekunden statt in Minuten erfassen.

Themenfeld 2:Ziele und Aktivitäten

Niemand kann dich dazu motivieren, einen Marathon zu laufen, wenn du es nicht willst. Du musst deinen eigenen Eifer aufbringen. Eine Möglichkeit, motiviert zu bleiben, besteht darin, Ziele zu setzen und zu erreichen. Die nächsten beiden Themenbereiche befassen sich mit dem Setzen und Erreichen von Zielen.

Zuerst sehen wir uns die Goals and Activities an Fachbereich. Es enthält drei Tabellen:

  1. goal ” enthält Details zu den in der App definierten Zielen.
  2. activity ” speichert Informationen über verschiedene Arten von Trainingsaktivitäten, wie Gehen, schnelles Gehen, Laufen, Schwimmen, Radfahren usw.
  3. goal_activity ” speichert Details zu Aktivitäten, die zum Erreichen eines Ziels erforderlich sind.

Es ist wichtig zu verstehen, dass das gleiche Ziel von verschiedenen Benutzern unterschiedlich erreicht wird. Auch hier hat ein 15-jähriges Mädchen einen anderen Trainingsplan und eine Reihe von Aktivitäten als ein 40-jähriger Mann. Unter Berücksichtigung dieser Tatsachen haben wir die folgenden Spalten in das „goal ” Tabelle:

  • distance_to_run – Die Distanz, die ein Läufer am Ende dieses Ziels laufen können sollte.
  • target_time_in_min – Die maximale Zeit, die benötigt wird, um diese Strecke zurückzulegen.
  • gender – Für welches Geschlecht ist dieses Ziel.

Ein Ziel kann für eine Altersgruppe erstellt werden, sagen wir 15-20 oder 35-40. Wie wir trainieren, ändert sich mit zunehmendem Alter ein wenig, deshalb haben wir zwei weitere Spalten zu „goal “:

  • starting_age – Das Mindestalter für dieses Ziel.
  • closing_age – Das Höchstalter für dieses Ziel.

Menschen können große Träume haben, aber der einzige Weg, Dinge wirklich zu verwirklichen, besteht darin, schrittweise voranzukommen. Diese App schränkt ein, wie Benutzer Ziele setzen; Sie müssen kleinere, erreichbare Ziele erreichen, bevor sie die größeren anstreben. Ein Stubenhocker kann davon träumen, einen vollen Marathon von 26,2 Meilen/42,2 km zu laufen, aber er sollte zuerst auf einen 5-km-Lauf hinarbeiten.

Das „goal ” Tabelle behandelt Beschränkungen mittels der folgenden Spalten:

  • current_run_distance_per_week – Die Mindestlaufstrecke, die erreicht wird, bevor ein Benutzer ein bestimmtes Ziel festlegen kann; und
  • current_min_title_id – Der Mindesttitel, den Benutzer besitzen müssen, um dieses Ziel festzulegen.

Wenn diese Voraussetzungen nicht erfüllt sind, steht dieses Ziel dem Benutzer nicht zur Verfügung. Beide Spalten sind jedoch nullable; Es wird einige Ziele geben, für die keine Fitnessvoraussetzungen erforderlich sind.

Kommen wir zur „goal_activity " Tisch. Die meisten dieser Säulen dienen einem offensichtlichen Zweck. Ich werde nur zwei kommentieren, beginnend mit seq_of_day Säule. Dies ist eine Zahlenspalte, die Werte enthält, die den Tag angeben, an dem eine Aktivität durchgeführt werden soll. Offensichtlich beginnt diese Sequenz für jedes Tor bei 1. Es kann niemals NULL oder NULL sein. Die Nummern für ein Ziel dürfen nicht fortlaufend sein; Dies würde bedeuten, dass Ruhetage festgelegt wurden. Tage, für die es in dieser Tabelle keine Einträge gibt, sind eigentlich Ruhetage.

Als nächstes haben wir die distance_to_cover Säule. Dies ist nullable, da es Aktivitäten gibt (wie Yoga, Stretching und Gewichtheben), bei denen die Entfernung keine Rolle spielt. Beachten Sie jedoch, dass min_pace und max_pace Spalten in der „activity ”-Tabelle sind ebenfalls nullable.

Themenbereich Nr. 3:Benutzerziele und -übergänge

In diesem Themenbereich dreht sich alles um von Nutzern erstellte Ziele und von Apps erstellte Aktivitätspläne. Hier sind aktuelle Daten und der seq_of_day wichtig Spalte in der „goal_activity ”-Tabelle spielt eine wichtige Rolle beim Rendern von Plandaten, ebenso wie start_date von Benutzern aufgrund ihrer Ziele ausgewählt.

Das „user_goal “ und „transition_plan ” Tabellen sind beide weitgehend selbsterklärend. Es gibt nur ein paar Spalten, die wir hervorheben sollten.

In der Datei „user_goal ” Tabelle:

  • is_active – Zeigt an, ob ein Benutzer bei diesem Ziel noch Fortschritte macht. Alle in Bearbeitung befindlichen Ziele hätten in dieser Spalte ein „Y“. Diese Spalte ermöglicht es der App, Benutzer darauf zu beschränken, jeweils ein Ziel festzulegen.
  • create_date – Das Datum, an dem ein Ziel erstellt wurde.
  • start_date – Das Datum, an dem ein Ziel tatsächlich gestartet wurde. Es darf nicht mit create_date identisch sein.
  • expected_end_date – Ein Enddatum, das von der App berechnet wird, nachdem sie einen Übergangsplan für den Benutzer erstellt hat.
  • actual_end_date – Wann das Ziel tatsächlich erreicht wurde. Es kann Abweichungen vom Trainingsplan geben, daher benötigen wir diese Spalte, um das tatsächliche Enddatum zu erfassen. Die App bietet möglicherweise die Option, einen Tag zu überspringen oder den Trainingsplan um etwa einen Tag vorzuziehen. In solchen Fällen das actual_end_date wird sicherlich vom expected_end_date abweichen .

Im „transition_plan ” Tabelle:

  • is_complete – Zeigt an, ob eine Aktivität übersprungen wurde, noch nicht begonnen wurde oder abgeschlossen ist. Es enthält ein „Y“, „N“ oder ein Leerzeichen.
  • start_timestamp – Der Zeitstempel, wann eine Aktivität gestartet wurde.
  • end_timestamp – Der Zeitstempel, wann die Aktivität abgeschlossen wurde.

Da wir verstehen, dass es im Training zu Lücken kommen kann (aufgrund von Krankheit, Verletzung oder mangelnder Motivation), enthält diese Tabelle drei verschiedene Daten:

  • original_calendar_date – Ein Kalenderdatum, das angibt, wann eine Aktivität durchgeführt werden muss. Dieser Wert wird ausgefüllt, wenn die App einen Trainingsplan erstellt.
  • planned_calendar_date – Diese Spalte bleibt zunächst leer. Ein Datum wird ausgefüllt, sobald eine Änderung im Trainingsplan vorgenommen wird.
  • actual_calendar_date – Diese Spalte wird gefüllt, sobald der Benutzer eine Aktivität als abgeschlossen markiert. Dies ist das Datum, an dem die Aktivität tatsächlich beendet ist.

Das planned_calendar_date und actual_calendar_date Spalten sind nullable; Sie werden während der anfänglichen Plangenerierung nicht ausgefüllt.

Weitere drei Spalten in dieser Tabelle sind nullable, sodass dieses Datenmodell alle möglichen Szenarien für eine laufende Aktivität verarbeiten kann. Hier sind einige Beispiele:

  • Eine Aktivität, die noch nicht gestartet wurde –
    • is_complete – NULL
    • start_timestamp – NULL
    • end_timestamp - NULL
  • Eine Aktivität, die begonnen, aber nicht abgeschlossen wurde –
    • ist_vollständig – NULL
    • start_timestamp – WERT
    • end_timestamp - NULL
  • Eine übersprungene Aktivität –
    • ist_vollständig – „N“
    • start_timestamp – NULL
    • end_timestamp - NULL
  • Eine abgeschlossene Aktivität –
    • ist_vollständig – „Y“
    • start_timestamp –VALUE
    • end_timestamp - VALUE

Was würden Sie an diesem Datenmodell ändern?

Das Training für einen Marathon ist mehr als nur Bewegung. Marathonläufer müssen jeden Aspekt ihres Lebensstils optimieren, angefangen bei ihrer täglichen Nahrungsaufnahme, ihrer mentalen Stärke und sogar der Menge an Schlaf, die sie bekommen.

Eine effektive App muss in der Lage sein, alle Aspekte des Trainings zu organisieren, zu planen und zu verfolgen. Berücksichtigt unser Datenmodell all diese Aspekte? Welche Änderungen sind erforderlich, um daraus eine vollwertige Trainings-App zu machen?

Bitte teilen Sie Ihre Ansichten und Vorschläge im Kommentarbereich mit.