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

Ein Datenmodell, um Ihren wertvollsten Besitz im Auge zu behalten

Gesund und fit zu sein ist ein Lebensstil, keine Modeerscheinung. Menschen, die den Wert der Gesundheit erkennen, machen es zu einer Priorität und führen Aufzeichnungen über alle ihre fitnessbezogenen Fakten. In diesem Artikel untersuchen wir das Design der Datenbank hinter einer Gesundheits- und Fitnessanwendung.

Es gibt viele Anwendungen, mit denen Benutzer ihre Gesundheits- und Fitnessinformationen protokollieren können. Einige große Player wie Apple, Google und Microsoft haben ihre eigenen Entwicklungs-APIs speziell für diesen Markt eingeführt. Beispielsweise hat Google „Fit“ und Microsoft „HealthVault“.

In diesem Artikel erkläre ich das Datenmodell hinter einer Anwendung für Gesundheitsakten. Lassen Sie uns zunächst genau besprechen, was wir von einer solchen App erwarten würden.

Projektanforderungen für eine Gesundheitsinfo-App

Im Folgenden sind einige Funktionen aufgeführt, die eine Gesundheitsinfo-App unterstützen sollte:

  • Benutzer können ein Konto erstellen und Gesundheitsinformationen für mehrere Profile speichern, d. h. eine Person kann Gesundheitsinformationen für alle ihre Familienmitglieder speichern.
  • Benutzer können ihre gesamte Krankengeschichte aufzeichnen, einschließlich Impfungen, frühere Laborergebnisse, Allergien und Familienanamnese .
  • Benutzer können verschiedene Gesundheits- und Fitnessmessungen wie Blutzuckerspiegel, Blutdruck, Körperzusammensetzung und -maße einschließlich Body-Mass-Index (BMI), Cholesterin, Größe, Gewicht, reproduktive Gesundheit usw. speichern.
  • li>
  • Informationen können mit verschiedenen Methoden und Maßeinheiten erfasst werden . Beispielsweise kann der Blutzucker in mg/dL oder mmol/L gemessen werden.
  • Es gibt keine Begrenzung, wie viele Informationen Benutzer speichern können.
  • Das System wird auch akzeptierte Gesundheitsstandards wie Blutdruck- oder BMI-Werte speichern und Benutzer benachrichtigen, wenn ihre Werte außerhalb „sicherer“ oder „normaler“ Bereiche liegen.
  • Benutzer können auch Informationen (wie Blutzucker, Größe, Gewicht usw.) auswählen, die auf ihrem persönlichen Dashboard angezeigt werden sollen. Auf diese Weise können sie alles überwachen, was sie brauchen.

Anstatt einfach zu erklären, was jeder Abschnitt und jede Tabelle im Datenmodell macht, beantworten wir einige Fragen dazu. Die Funktion der verschiedenen Tabellen wird im weiteren Verlauf deutlich.

Zuerst können Sie sich das vollständige Datenmodell ansehen, wenn Sie möchten.

Das Datenmodell




Beantwortung von Fragen zum Gesundheitsinfo-Datenmodell

Wie können Benutzer Gesundheitsinformationen für alle ihre Familienmitglieder einzeln speichern?

Lassen Sie uns zunächst über die Konto- und Profilverwaltung sprechen . Dies kann durch zwei verschiedene Tabellen erreicht werden; eins (user_account ) zum Protokollieren der Details von Personen, die sich bei der Anwendung registrieren, und eine (user_profile ) zum Protokollieren von Details aller verschiedenen Profile, die ein registrierter Benutzer erstellt. Personen können eine Reihe von Profilen erstellen – z. eine für jedes ihrer Familienmitglieder.

Schauen wir uns die verschiedenen Tabellen an, die dies ermöglichen.

Das user_account Tabelle enthält grundlegende Details über die Person, die sich bei der Anwendung registriert. Seine Spalten sind:

  • id –Eine Ersatzschlüsselspalte für diese Tabelle, die jeden Benutzer eindeutig identifiziert.
  • login_name – Der Name oder eine andere ID, die der Benutzer als Anmeldenamen wählt. Dieser Spalte muss eine Eindeutigkeitsbeschränkung auferlegt werden, um sicherzustellen, dass jeder Anmeldename anders ist.
  • enc_password – Das vom Benutzer gewählte Kontopasswort in verschlüsselter Form.
  • Adressspalten – Speichert Adress- und Kontaktdaten der Nutzer zum Zeitpunkt der Registrierung. Diese Spalten enthalten street_address , city , state , country , und zip . Da diese Felder im Registrierungsprozess optional sind, habe ich diese Spalten als nullable gehalten.
  • contact_number und email – Speichert die Kontaktnummer (d. h. Telefonnummer) des Benutzers und seine E-Mail-Adresse. Diese Felder sind auch Teil des Registrierungsprozesses, aber sie sind nicht nullable.
  • is_active – Enthält entweder ein „Y“ oder ein „N“, um anzugeben, ob ein Konto derzeit aktiv ist.
  • account_image – Benutzer dürfen ihre eigenen Bilder hochladen. Da ein Benutzer null oder (maximal) ein Bild pro Konto hochladen kann, ist dies eine nullfähige BLOB-Spalte.

Das user_profile Tabelle speichert Details aller Profile, die von registrierten Benutzern erstellt wurden. Die Spalten in dieser Tabelle sind:

  • id – Eine eindeutige Nummer, die jedem neuen Profil zugewiesen wird.
  • user_account_id – Gibt an, welcher Benutzer das Profil erstellt hat.
  • user_profile_name – Speichert den Namen der Person im Profil. (Wir nennen diese Person die „Profilperson“ und den Benutzer, der die Profile erstellt, den „Kontoinhaber“.)
  • relationship_id – Gibt die Beziehung zwischen dem Kontoinhaber und der Profilperson an. Diese Spalte bezieht sich auf die relationship Tabelle, die alle möglichen Arten von Beziehungen enthält (wie self , Mutter , Vater , Schwester , Bruder , Sohn , Tochter , Haustier usw.).
  • email – Diese Spalte enthält die E-Mail-Adresse der Profilperson. Über diese E-Mail würden Berichte oder andere Informationen mit ihnen geteilt; Informationen würden auch an den Kontoinhaber gesendet. Wenn Melissa beispielsweise ein Profil für ihre Tochter Eva erstellt, werden Evas Informationen an Melissas E-Mail-Adresse und möglicherweise an Evas E-Mail-Adresse gesendet – siehe unten.
  • is_report_sharing_enabled – Berichte werden immer mit dem Kontoinhaber geteilt, aber es ist optional, diese Daten mit der Profilperson zu teilen. Diese Spalte zeigt an, ob Informationen mit der Profilperson geteilt werden.
  • is_active – Gibt an, ob ein Profil derzeit aktiv ist. Dies ist eine Soft-Delete-Funktion für den Fall, dass Profile versehentlich gelöscht werden.
  • profile_image – Speichert ein Bild der Profilperson. Dieses Attribut ist optional und daher nullable.

Die characteristic_data Tabelle enthält individuelle Profildetails (wie Blutgruppe), die sich im Laufe der Zeit nie ändern. Alle Spalten in dieser Tabelle sind selbsterklärend, außer fitzpatrick_skin_type , der die Beschaffenheit der Haut von I (immer brennt, bräunt nie) bis VI (nie brennt, keine Veränderung des Aussehens bei Bräunung) einstuft.

Ich habe zwei Spalten für das Geschlecht hinzugefügt; biological_gender bezeichnet das eigene Geschlecht zum Zeitpunkt der Geburt und current_gender bezeichnet das aktuelle Geschlecht der Profilperson. Diese zweite Spalte gilt nur für Transgender-Personen, und deshalb habe ich sie auf Null gesetzt.

Welche wichtigen Informationen können in diesem System gespeichert werden? Wie wird es gespeichert?

Jetzt gehen wir weiter zum Gesundheitsdatenmanagement . Körperzusammensetzung, Blutzuckerwerte und Körpermaße werden in separaten Tabellen gespeichert. Allerdings können Personen mehr als eine Art von Informationen gleichzeitig eingeben, daher verwenden wir das body_vitals_log Tabelle, um zu verfolgen, welche Informationen in ein Profil eingeloggt sind und wann sie eingegeben werden.

Alle wichtigen Statistiken werden in den folgenden Tabellen aufbewahrt:

  • body_composition – Speichert Details zu verschiedenen Prozentsätzen der Körperzusammensetzung wie Fett, Magermasse, Knochen oder Wasser. Es enthält auch BMI-Werte (Body-Mass-Index) für Einzelpersonen.
  • blood_cholesterol – Enthält Cholesterindetails wie LDL, HDL, Triglyceride und Gesamt.
  • body_dimension – Erfasst die Maße verschiedener Körperbereiche, wie z. B. die Maße von Taille oder Brust.
  • body_weight – Speichert Werte für das Körpergewicht.
  • body_height – Enthält Werte für die Körpergröße einer Person.
  • blood_pressure – Enthält Blutdruckwerte (systolisch und diastolisch).
  • blood_glucose – Zeichnet den Blutzuckerspiegel auf.

Die meisten Spalten in den obigen Tabellen sind bis auf wenige Ausnahmen selbsterklärend. Sie werden einige zusätzliche Spalten wie measurement_method_id bemerken , compare_to_normal_id , measurement_unit_id und measurement_context in fast jeder dieser Tabellen. Ich erkläre diese Spalten später.

Das body_vitals_log verfolgt, welche Informationen zu einem bestimmten Zeitpunkt für ein Profil protokolliert werden. Die Spalten in dieser Tabelle sind:

  • user_profile_id – Zeigt an, welches Profil die Informationen protokolliert.
  • dt_created – Speichert Datum und Uhrzeit der Eingabe der Informationen.
  • data_source_id – Kennzeichnet die Quelle der Daten, z. B. ein Handbuch, ein elektronisches Gerät usw.
  • IDs verschiedener Vitalstatistiken – Ich habe alle diese Spalten nullable gehalten, da Benutzer ein oder mehrere Elemente gleichzeitig protokollieren dürfen. Nicht alle Benutzer möchten dieselben Gesundheitsstatistiken verfolgen.

Wie können wir das System in verschiedenen Regionen zum Laufen bringen?

Einige Informationen werden in verschiedenen Bereichen in verschiedenen Einheiten gemessen. Beispielsweise wird das Körpergewicht in Asien in Kilogramm gemessen, in Nordamerika jedoch in Pfund. Damit dies in unserer Datenbank funktioniert, brauchen wir eine Möglichkeit, Maßeinheiten zu verfolgen.

  • id – Dient als Primärschlüssel dieser Tabelle und ist derjenige, auf den andere Tabellen verweisen.
  • measurement_parameter – Gibt die Art der Vitalinformationen (wie Gewicht, Größe, Blutdruck usw.) an, die eine Einheit misst.
  • unit_name – Speichert den Namen der Einheit. Denken Sie an Kilogramm und Pfund für das Gewicht, mg/dL und mmol/L für den Blutzucker.

Woher wissen die Leute, ob ihre Zahlen gut sind?

Unser System ist nicht viel hilfreich, es sei denn, es warnt Menschen vor Gesundheitsrisiken oder Schwachstellen. Wir aktivieren diese Funktion, indem wir die comparison_to_normal_id hinzufügen Spalte in allen Datentabellen mit wichtigen Informationen.

Wenn neue Vitalinformationen in das System eingeloggt werden, werden Datensätze mit ihren entsprechenden Benchmark-Werten verglichen und diese Spalte wird entsprechend eingestellt.

Mögliche Werte für diese Tabelle sind:


Ich Text
1 Weiß nicht
2 Viel niedriger
3 Senken
4 Normal
5 Höher
6 Viel höher


Können Benutzer aufzeichnen, wann Messungen durchgeführt wurden?

Nutzer müssen beispielsweise angeben, wann ihr Blutzucker gemessen wurde – also vor oder nach einer Mahlzeit. Oder sie können sich selbst wiegen und die Ergebnisse vor und nach dem Training aufzeichnen. Um dies zu erleichtern, habe ich eine Spalte hinzugefügt, measurement_context , in den Tabellen mit wichtigen Informationen, die möglicherweise Kontextinformationen benötigen. Einige mögliche Werte für diese Spalte sind unten aufgeführt:


Vor dem Frühstück
Nach dem Frühstück
Vor dem Mittagessen
Nach dem Mittagessen
Vor dem Abendessen
Nach dem Abendessen
Vor dem Training
Nach dem Training
Fasten
Nicht fasten
Nach dem Essen
Vor dem Essen
Vor dem Schlafengehen


Was ist, wenn eine Person Diabetiker ist und ihren Blutzuckerspiegel überwachen muss?

Das System, das ich vorschlage, wird ein Dashboard haben, das wichtige Statistiken in einem grafischen Format anzeigen kann. Benutzer können auswählen, was sie auf ihrem Profil-Dashboard sehen möchten, und jedes Profil hat sein eigenes Dashboard. Kontoinhaber dürfen alle Profil-Dashboards sehen, die sie erstellt haben.

Ich habe eine CHAR(1)-Spalte für jeden Parameter hinzugefügt, der auf einem Dashboard angezeigt werden kann. Standardmäßig werden alle Spalten mit „N“ (Anzeige ist ausgeschaltet) ausgefüllt, wenn ein neues Profil erstellt wird. Benutzer können ihre Dashboard-Konfiguration später über eine Option in der Benutzeroberfläche der App ändern.

Wie hilft dieses System den Menschen, fit zu bleiben?

Mit anderen Worten, wir sprechen von Fitness-Datenspeicherung . Neben Gesundheitsinformationen ermöglicht das System seinen Benutzern auch, Informationen über ihre Fitness- und Trainingsroutinen zu protokollieren.

Das activity_log table ist die Haupttabelle in diesem Themenbereich. Es erfasst Details über jede Art von Aktivitätsprofil, das Personen ausführen.

Jede Aktivität kann durch einen oder mehrere der folgenden drei Parameter gemessen werden:

  • Start- und Endzeit – Aktivitäten wie Sport oder Spiel, Schlange stehen usw. werden in Bezug auf Start- und Endzeit gemessen. Dies geschieht über die start_time und end_time Spalten in activity_log .
  • Zurückgelegte Strecke – Aktivitäten wie Laufen oder Radfahren werden in zurückgelegten Distanzen gemessen. Diese wird in distance_covered gespeichert Spalte.
  • Schrittzahl – Aktivitäten wie Gehen werden in Schrittzahlen gemessen, und die Werte werden in steps_count gespeichert Spalte.

Sie fragen sich bestimmt, warum die calories_burnt Spalte befindet sich im activity_log Tisch. Wie der Name schon sagt, enthält diese Spalte den Wert der von der Profilperson bei einer bestimmten Aktivität verbrannten Kalorien. Ich werde in einem späteren Abschnitt erklären, wie wir diese Werte berechnen können.

Ich habe eine Tabelle namens activity um eine Liste aller möglichen Aktivitäten zu führen. Die Spalten in dieser Tabelle sind:

  • id – Weist jeder Aktivität eine eindeutige ID-Nummer zu.
  • activity_name – Speichert Aktivitätsnamen.
  • activity_multiplier – Diese Spalte spielt eine Schlüsselrolle bei der Berechnung des Kalorienverbrauchs von Personen, die Aktivitäten nachgehen.

Wie berechnen Sie die verbrannten Kalorien für jede Aktivität?

Um zu verstehen, wie man den Kalorienverbrauch berechnet, müssen wir zuerst den BMR oder Grundumsatz einer Person verstehen. Dieser sagt uns, wie viele Kalorien ein Körper im Ruhezustand verbrennt. Der BMR jeder Person hängt von ihrem Geschlecht, Alter, Gewicht und ihrer Größe ab. Aus Sicht der Datenmodellierung ist ein BMR eine sich langsam ändernde Dimension und ändert sich daher mit der Zeit. Wir speichern die neuesten individuellen BMR-Werte im user_bmr Tisch.

Es gibt verschiedene Methoden zur Berechnung von BMR-Werten:

Methode Nr. 1:Harris-Benedict-Methode

BMR Männer:66 + (6,23 X Gewicht in Pfund) + (12,7 X Größe in Zoll) – (6,8 X Alter)

BMR Frauen:655 + (4,35 X Gewicht in Pfund) + (4,7 X Größe in Zoll) – (4,7 X Alter)


Methode Nr. 2:Katch-McArdle-Methode

BMR (Männer + Frauen):370 + (21,6 * Magermasse in Kilogramm)

Magermasse =Gewicht in Kilogramm – (Gewicht in Kilogramm * Körperfett %)

Wir können den BMR einer Person und den oben erwähnten Aktivitätsmultiplikator verwenden, um herauszufinden, wie viele Kalorien eine Person bei einer bestimmten Aktivität verbrennt. Die Formel lautet:

Verbrannte Kalorien =Aktivitätsmultiplikator * BMR

Hinweis:Beide oben genannten BMR-Berechnungsmethoden verwenden dieselben Multiplikatorwerte für Aktivitäten. Weitere Informationen finden Sie in diesem Artikel.

Können wir die historischen BMR-Werte der Profile behalten?

Ja. Wir können BMR-Werte im user_bmr_archive Tisch.

Wir beginnen mit dem Hinzufügen einer Spalte, id_version , zum bestehenden user_bmr Tisch. Wir erhöhen diesen Wert jedes Mal um 1, wenn der BMR-Wert einer Profilperson aktualisiert wird.

Das user_bmr_archive Tabelle ist fast eine Kopie der user_bmr Tisch. Der einzige Unterschied besteht darin, dass es ein dt_expired hat Spalte anstelle von dt_created und dt_modified Säulen. Der dt_expired Spalte speichert das Datum, an dem die Version ungültig wurde, d. h. wann der BMR-Wert in user_bmr .

Was ist, wenn Benutzer Aufzeichnungen über ihre Impfungen, Familienanamnese und Allergien führen möchten?

Dieses System nutzt die folgenden Tabellen, um Benutzern die Möglichkeit zu geben, zusätzliche Gesundheitsinformationen zu speichern.

Die immunization Tabelle speichert Details über Impfungen, die von Profilpersonen erhalten wurden. Nach dem Beispiel sehen Sie eine kurze Beschreibung der Spalten, die diese Tabelle enthält:

Beispiel – John Soo erhielt die zweite von drei Dosen eines Hepatitis-B-Impfstoffs. Es wurde von Dr. David Moore am 28. November 2016 verabreicht. Die Impfung wurde durch eine Injektion in die linke Hand verabreicht. Es wird von Cipla (einem pharmazeutischen Unternehmen) hergestellt.

  • idDer Primärschlüssel dieser Tabelle
  • user_profile_idBezieht sich auf die user_profile_ID von John Soo
  • vaccination_name – „Hepatitis B“
  • dt_received – „28. November 2016“
  • number_in_sequence – „02“
  • body_area_idDie ID der linken Hand, bezogen auf body_area Tabelle
  • provider_name - "DR. David Moore“
  • how_administered – „Injiziert“ (andere mögliche Werte sind Nasenspray, Tablette, Tropfen, Sirup )
  • manufacturer – „Cipla“

Die allergy Tabelle speichert Details über Allergien, die von Profilpersonen erfahren wurden. Unten ist die Liste der Spalten, mit den relevanten Werten, die für jede gemäß dem Beispiel angegeben sind:

Beispiel – Alison D’Souza bekommt Husten, wenn sie Joghurt isst. Sie hatte diese Reaktion zum ersten Mal, als sie 8 Jahre alt war. Sie konsultiert Dr. Bill Smith, der Medikamente verschreibt und bestimmte Vorsichtsmaßnahmen empfiehlt. Diese Allergie besteht immer noch, aber ihre Intensität ist jetzt geringer.

  • id – Der Primärschlüssel der Tabelle
  • user_profile_id – Verweist auf die user_profile_id von Alison D’Souza
  • allergy_type_idBezieht sich auf die ID für den Allergietyp „Lebensmittel“ im allergy_type Tisch. (Der allergy_type Tabelle definiert verschiedene Allergietypen wie Lebensmittel, Medikamente, Umwelt, Tier, Pflanze usw.)
  • allergy_reaction_idBezieht sich auf die ID der „Husten“-Allergiereaktion im allergy_reaction Tabelle.
  • first_observedDas Datum, an dem diese Reaktion zum ersten Mal beobachtet wurde, d. h. als Alison 8 Jahre alt war.
  • consulting_doctor_name - "DR. Bill Smith“
  • treatment_briefEine kurze Beschreibung der verschriebenen Medikamente und empfohlenen Vorsichtsmaßnahmen.
  • does_treatment_cure_allergy – „Teilweise geheilt. Verringerte Reaktionsintensität.“

Die family_history Tabelle speichert Details über die medizinische Familienanamnese der Benutzer. Auch hier haben wir die Spalten und die Art der Informationen, die darin gespeichert würden, basierend auf dem folgenden Beispiel aufgelistet.

Beispiel – Dianas Mutter Lisa hat die Parkinson-Krankheit (eine neurologische Erkrankung). Sie wurde behandelt, hat aber keine spürbare Besserung bekommen.

  • idder Primärschlüssel der Tabelle
  • user_profile_idDianas user_profile_ID aus dem user_profile Tabelle
  • relationship_idDie „Mutter“-ID aus der relationship Tabelle
  • Relative_name – „Lisa“
  • Date_of_birthGeburtsdatum von Lisa
  • Date_of_death – NULL (Lisa lebt noch und kämpft hart gegen die Krankheit.)
  • Condition_briefEine kurze Beschreibung, wie, wann und wo der Zustand begonnen hat, Konsultationen, etwaige Erleichterungen usw.
  • Current_status – „Aktuell“ (Andere mögliche Status sind „Unterbrochen“ und „Vergangenheit“.)
  • How_it_ended – NULL

Was würden Sie diesem Datenmodell hinzufügen?

Das System lässt die Menschen wissen, wie viele Kalorien sie verbrennen, während sie verschiedenen Aktivitäten nachgehen, aber es verfolgt nicht, wie viele Kalorien sie verbrauchen oder wie nahrhaft ihre Nahrungsauswahl ist. Außerdem ermöglicht das System ihnen, ihre Fitnessdaten täglich aufzuzeichnen, aber es erlaubt ihnen nicht, sich ein Ziel zu setzen, einen Plan zu formulieren und ihre Fortschritte zu verfolgen, damit sie motiviert bleiben.

Sollten wir erwägen, diese Funktionen darin einzubauen? Welche Änderungen müssen vorgenommen werden, um diese Funktionen hinzuzufügen?

Teilen Sie uns Ihre Ideen mit!