Bycie zdrowym i sprawnym to styl życia, a nie moda. Osoby, które zdają sobie sprawę z wartości zdrowia, stawiają je na pierwszym miejscu, ewidencjonując wszystkie swoje fakty związane z kondycją. W tym artykule przyjrzymy się projektowi bazy danych aplikacji związanej ze zdrowiem i fitnessem.
Istnieje wiele aplikacji, które pozwalają użytkownikom rejestrować informacje o swoim zdrowiu i kondycji. Kilku dużych graczy, takich jak Apple, Google i Microsoft, uruchomiło własne interfejsy programistyczne przeznaczone specjalnie dla tego rynku. Na przykład Google ma „Fit”, a Microsoft „HealthVault”.
W tym artykule wyjaśnię model danych stojący za aplikacją do obsługi rekordów zdrowotnych. Najpierw omówmy dokładnie, czego oczekiwalibyśmy od takiej aplikacji.
Wymagania projektowe dla aplikacji o zdrowiu
Poniżej znajdują się niektóre funkcje, które powinna obsługiwać aplikacja informująca o zdrowiu:
- Użytkownicy mogą utworzyć konto i przechowywać informacje o stanie zdrowia dla wielu profili, tj. osoba może przechowywać informacje o stanie zdrowia wszystkich członków swojej rodziny.
- Użytkownicy mogą rejestrować całą historię swojego zdrowia, w tym immunizacje, wcześniejsze wyniki badań laboratoryjnych, alergie i rodzinną historię medyczną .
- Użytkownicy mogą przechowywać różne pomiary stanu zdrowia i sprawności, takie jak poziom glukozy we krwi, ciśnienie krwi, skład i wymiary ciała, w tym wskaźnik masy ciała (BMI), cholesterol, wzrost, waga, zdrowie reprodukcyjne itp.
- Informacje można rejestrować przy użyciu różnych metod i jednostek miary . Na przykład stężenie glukozy we krwi można mierzyć w mg/dl lub mmol/l.
- Nie ma ograniczeń co do ilości informacji, które użytkownicy mogą przechowywać.
- System utrzyma również przyjęte standardy zdrowotne, takie jak ciśnienie krwi lub wartości BMI, i będzie ostrzegał użytkowników, jeśli ich wartości wykraczają poza „bezpieczne” lub „normalne” zakresy.
- Użytkownicy mogą również wybrać informacje (takie jak poziom glukozy we krwi, wzrost, waga itp.), które będą wyświetlane na ich osobistym pulpicie nawigacyjnym. W ten sposób mogą monitorować wszystko, czego potrzebują.
Zamiast po prostu wyjaśniać, co każda sekcja i tabela robi w modelu danych, odpowiedzmy na kilka pytań na ten temat. Funkcja różnych stołów stanie się jasna w miarę postępów.
Po pierwsze, jeśli chcesz, możesz przyjrzeć się kompletnemu modelowi danych.
Model danych
Odpowiadanie na pytania dotyczące modelu danych dotyczących zdrowia
W jaki sposób użytkownicy mogą indywidualnie przechowywać informacje o stanie zdrowia wszystkich członków ich rodzin?
Najpierw porozmawiajmy o Zarządzaniu kontem i profilami . Można to osiągnąć, mając dwa różne stoły; jeden (user_account
) do logowania danych osób, które rejestrują się w aplikacji oraz jeden (user_profile
) do rejestrowania szczegółów wszystkich różnych profili utworzonych przez zarejestrowanego użytkownika. Ludzie mogą tworzyć wiele profili – m.in. po jednym dla każdego członka rodziny.
Przyjrzyjmy się różnym tabelom, które to umożliwiają.
user_account
tabela zawiera podstawowe dane osoby rejestrującej się w aplikacji. Jego kolumny to:
id
–Kolumna klucza zastępczego dla tej tabeli, która jednoznacznie identyfikuje każdego użytkownika.login_name
– Nazwa lub inny identyfikator, który użytkownik wybiera jako swoją nazwę logowania. Na tę kolumnę należy nałożyć unikatowe ograniczenie, aby upewnić się, że każda nazwa logowania jest inna.enc_password
– Hasło do konta wybrane przez użytkownika w postaci zaszyfrowanej.- kolumny adresowe – Przechowuje adresy i dane kontaktowe użytkowników w momencie rejestracji. Te kolumny zawierają
street_address
,city
,state
,country
izip
. Ponieważ te pola są opcjonalne w procesie rejestracji, zachowałem te kolumny jako dopuszczające wartość null. contact_number
iemail
– Przechowuje numer kontaktowy użytkownika (tj. numer telefonu) i jego adres e-mail. Te pola są również częścią procesu rejestracji, ale nie można ich zerować.is_active
– Posiada „Y” lub „N”, aby wskazać, czy konto jest aktualnie aktywne.account_image
– Użytkownicy mogą przesyłać własne obrazy. Ponieważ użytkownik może przesłać zero lub (maksymalnie) jeden obraz na konto, jest to kolumna typu BLOB dopuszczająca wartość null.
user_profile
tabela przechowuje szczegóły wszystkich profili utworzonych przez zarejestrowanych użytkowników. Kolumny w tej tabeli to:
id
– Unikalny numer przypisany do każdego nowego profilu.user_account_id
– Wskazuje, który użytkownik utworzył profil.user_profile_name
– Przechowuje nazwisko osoby w profilu. (Nazwiemy tę osobę „osobą z profilu”, a użytkownika, który tworzy profile, „właścicielem konta”.)relationship_id
– Wskazuje relację między posiadaczem konta a osobą profilową. Ta kolumna odnosi się dorelationship
tabela, która zawiera wszystkie możliwe typy relacji (takie jak ja , matka , ojciec , siostra , brat , syn , córka , zwierzę itp.).email
– Ta kolumna zawiera adres e-mail osoby z profilu. Raporty lub inne informacje zostaną im udostępnione za pośrednictwem tego e-maila; informacje zostaną również wysłane do posiadacza rachunku. Na przykład, jeśli Melissa utworzy profil dla swojej córki Evy, informacje Evy zostaną wysłane na e-mail Melissy i prawdopodobnie na e-mail Evy – patrz poniżej.is_report_sharing_enabled
– Raporty są zawsze udostępniane właścicielowi konta, ale udostępnianie tych danych osobie z profilu jest opcjonalne. Ta kolumna pokazuje, czy informacje zostaną udostępnione osobie z profilu.is_active
– Określa, czy profil jest aktualnie aktywny. Jest to funkcja miękkiego usuwania na wypadek przypadkowego usunięcia profili.profile_image
– Przechowuje wizerunek osoby profilowej. Atrybut ten jest opcjonalny, a zatem może mieć wartość null.
characteristic_data
tabela zawiera szczegółowe dane profilu (takie jak grupa krwi), które nigdy nie zmieniają się w czasie. Wszystkie kolumny w tej tabeli są oczywiste, z wyjątkiem fitzpatrick_skin_type
, który klasyfikuje charakter skóry od I (zawsze oparzenia, nigdy się nie opala) do VI (nigdy nie oparzenia, brak zmiany wyglądu po opaleniu).
Dodałem dwie kolumny na płeć; biological_gender
oznacza płeć w momencie urodzenia, a current_gender
oznacza aktualną płeć osoby z profilu. Ta druga kolumna dotyczy tylko osób transpłciowych, dlatego zachowałem jej wartość nieważną.
Jakie istotne informacje można przechowywać w tym systemie? Jak to jest przechowywane?
Teraz przechodzimy do Zarządzania danymi zdrowotnymi . Skład ciała, poziom glukozy we krwi i wymiary ciała są przechowywane w osobnych tabelach. Jednak ludzie mogą wprowadzać więcej niż jeden typ informacji na raz, dlatego używamy body_vitals_log
tabeli, aby śledzić, jakie informacje są zapisywane w profilu i kiedy są wprowadzane.
Wszystkie istotne statystyki są przechowywane w następujących tabelach:
body_composition
– Przechowuje szczegółowe informacje o różnych procentach składu ciała, takich jak tłuszcz, masa beztłuszczowa, kości lub woda. Zawiera również wartości BMI (wskaźnika masy ciała) dla poszczególnych osób.blood_cholesterol
– Zawiera szczegółowe informacje o cholesterolu, takie jak LDL, HDL, triglicerydy i całkowity.body_dimension
– Rejestruje wymiary różnych obszarów ciała, takie jak obwód talii lub klatki piersiowej.body_weight
– Przechowuje wartości masy ciała.body_height
– Przechowuje wartości dla wzrostu osoby.blood_pressure
– Zawiera wartości ciśnienia krwi (skurczowe i rozkurczowe).blood_glucose
– Rejestruje poziom glukozy we krwi.
Większość kolumn w powyższych tabelach nie wymaga wyjaśnień, z kilkoma wyjątkami. Zauważysz kilka dodatkowych kolumn, takich jak measurement_method_id
, compare_to_normal_id
, measurement_unit_id
i measurement_context
w prawie każdym z tych stołów. Wyjaśnię te kolumny później.
body_vitals_log
śledzi, jakie informacje są rejestrowane w danym momencie dla profilu. Kolumny w tej tabeli to:
user_profile_id
– Pokazuje, który profil rejestruje informacje.dt_created
– Przechowuje datę i godzinę wprowadzenia informacji.data_source_id
– Oznacza źródło danych, takie jak instrukcja obsługi, urządzenie elektroniczne itp.- IDokumenty różnych ważnych statystyk – Wszystkie te kolumny zachowałem jako wartości null, ponieważ użytkownicy mogą logować jeden lub więcej elementów naraz. Nie wszyscy użytkownicy będą chcieli śledzić te same statystyki dotyczące zdrowia.
Jak możemy sprawić, by system działał w różnych regionach?
Niektóre informacje są mierzone w różnych jednostkach w różnych obszarach. Na przykład wagę ciała mierzy się w kilogramach w Azji, ale w funtach w Ameryce Północnej. Aby to zadziałało w naszej bazie danych, potrzebujemy sposobu na śledzenie jednostek pomiarowych.
id
– Służy jako klucz podstawowy tej tabeli i jest to ten, do którego odnoszą się inne tabele.measurement_parameter
– Oznacza rodzaj ważnych informacji (takich jak waga, wzrost, ciśnienie krwi itp.), które mierzy jednostka.unit_name
– Przechowuje nazwę jednostki. Pomyśl o kilogramach i funtach dla wagi, mg/dl i mmol/l dla glukozy we krwi.
Skąd ludzie będą wiedzieć, czy ich liczba jest dobra?
Nasz system nie jest zbyt pomocny, chyba że ostrzega ludzi o zagrożeniach dla zdrowia lub lukach. Włączamy tę funkcję, dodając comparison_to_normal_id
kolumna we wszystkich ważnych tabelach danych informacyjnych.
Gdy jakiekolwiek nowe istotne informacje zostaną zarejestrowane w systemie, rekordy zostaną porównane z odpowiadającymi im wartościami wzorcowymi, a ta kolumna zostanie odpowiednio ustawiona.
Możliwe wartości dla tej tabeli to:
I | Tekst |
---|---|
1 | Nie wiem |
2 | znacznie niższy |
3 | Niższe |
4 | Normalne |
5 | Wyższe |
6 | znacznie wyższy |
Czy użytkownicy mogą rejestrować, kiedy pomiary zostały wykonane?
Na przykład użytkownicy mogą potrzebować podać, kiedy zmierzono ich poziom glukozy we krwi – tj. przed lub po posiłku. Mogą też się ważyć i rejestrować wyniki przed i po ćwiczeniach. Aby to ułatwić, dodałem kolumnę measurement_context
, w najważniejszych tabelach informacyjnych, które mogą wymagać informacji kontekstowych. Poniżej przedstawiono niektóre możliwe wartości dla tej kolumny:
Przed śniadaniem |
Po śniadaniu |
Przed obiadem |
Po obiedzie |
Przed obiadem |
Po obiedzie |
Przed ćwiczeniem |
Po ćwiczeniach |
Poczcie |
Bez postu |
Po posiłku |
Przed posiłkiem |
Przed snem |
Co zrobić, jeśli osoba ma cukrzycę i musi monitorować poziom glukozy we krwi?
Proponowany przeze mnie system będzie posiadał pulpit nawigacyjny, który może wyświetlać istotne statystyki w formie graficznej. Użytkownicy mogą wybrać, co chcieliby zobaczyć na swoim pulpicie nawigacyjnym profilu, a każdy profil ma swój własny pulpit nawigacyjny. Właściciele kont mogą zobaczyć wszystkie utworzone przez siebie pulpity nawigacyjne.
Dodałem jedną kolumnę CHAR(1) dla każdego parametru, który może być wyświetlany na pulpicie nawigacyjnym. Domyślnie wszystkie kolumny zostaną wypełnione literą „N” (wyświetlanie jest wyłączone), gdy tworzony jest nowy profil. Użytkownicy mogą później modyfikować konfigurację swojego pulpitu nawigacyjnego za pomocą opcji w interfejsie użytkownika aplikacji.
W jaki sposób ten system pomaga ludziom zachować formę?
Innymi słowy, mówimy o przechowywaniu danych fitness . Oprócz informacji o zdrowiu system pozwala również użytkownikom rejestrować informacje o ich kondycji i rutynowych ćwiczeniach.
activity_log
tabela jest główną tabelą w tym obszarze tematycznym. Przechwytuje szczegóły dotyczące każdego rodzaju profilu aktywności wykonywanej przez osoby.
Każdą aktywność można zmierzyć jednym lub kilkoma z następujących trzech parametrów:
- Czas rozpoczęcia i zakończenia – Czynności takie jak uprawianie sportu lub gry, stanie w kolejce itp. są mierzone pod względem czasu rozpoczęcia i zakończenia. Odbywa się to przez
start_time
iend_time
kolumny wactivity_log
. - Przebyty dystans – Aktywności takie jak bieganie lub jazda na rowerze są mierzone na podstawie pokonanego dystansu. To jest przechowywane w
distance_covered
kolumna. - Liczba kroków – Czynności takie jak chodzenie są mierzone pod względem liczby kroków, a wartości są przechowywane w
steps_count
kolumna.
Musisz się zastanawiać, dlaczego calories_burnt
kolumna znajduje się w activity_log
stół. Jak sama nazwa wskazuje, kolumna ta zawiera wartość spalonych kalorii przez osobę profilową podczas wykonywania określonej czynności. Wyjaśnię, jak możemy obliczyć te wartości w dalszej części.
Utworzyłem jedną tabelę o nazwie activity
aby zachować listę wszystkich możliwych działań. Kolumny w tej tabeli to:
id
– Przypisuje unikalny numer identyfikacyjny do każdego działania.activity_name
– Przechowuje nazwy działań.activity_multiplier
– Ta kolumna odgrywa kluczową rolę w obliczaniu liczby spalonych kalorii przez osoby prowadzące zajęcia.
Jak obliczyć spalone kalorie dla każdej aktywności?
Aby zrozumieć, jak obliczyć spalanie kalorii, najpierw musimy zrozumieć BMR lub podstawową przemianę materii. To mówi nam, ile kalorii organizm spala w spoczynku. BMR każdej osoby zależy od jej płci, wieku, wagi i wzrostu. Z perspektywy modelowania danych BMR jest powoli zmieniającym się wymiarem i jako taki zmienia się w czasie. Będziemy przechowywać najnowsze indywidualne wartości BMR w user_bmr
stół.
Istnieją różne metody obliczania wartości BMR:
Metoda nr 1:Metoda Harris-Benedict
BMR Mężczyźni:66 + (6,23 X waga w funtach) + (12,7 X wzrost w calach) – (6,8 X wiek)
BMR Kobiety:655 + (4,35 X waga w funtach) + (4,7 X wzrost w calach) – (4,7 X wiek)
Metoda nr 2:Metoda Katch-McArdle
BMR (mężczyźni + kobiety):370 + (21,6 * beztłuszczowa masa w kilogramach)
Masa beztłuszczowa =waga w kilogramach – (waga w kilogramach * tkanka tłuszczowa %)
Możemy użyć BMR osoby i wspomnianego wyżej mnożnika aktywności, aby dowiedzieć się, ile kalorii spala osoba wykonująca daną aktywność. Wzór to:
Spalone kalorie =mnożnik aktywności * BMR
Uwaga:Obie powyższe metody obliczania BMR wykorzystują te same wartości mnożnika dla czynności. Więcej informacji znajdziesz w tym artykule.
Czy możemy zachować historyczne wartości BMR profili?
Tak. Możemy archiwizować wartości BMR w user_bmr_archive
stół.
Zaczynamy od dodania jednej kolumny, id_version
, do istniejącego user_bmr
stół. Stale zwiększamy tę wartość o 1 za każdym razem, gdy aktualizowana jest wartość BMR osoby w profilu.
user_bmr_archive
tabela jest prawie repliką user_bmr
stół. Jedyna różnica polega na tym, że ma dt_expired
kolumna zamiast dt_created
i dt_modified
kolumny. dt_expired
kolumna przechowuje datę, kiedy wersja stała się nieważna, tj. kiedy wartość BMR jest aktualizowana w user_bmr
.
Co, jeśli użytkownicy chcą prowadzić rejestr swoich szczepień, wywiadu rodzinnego i alergii?
Ten system wykorzystuje poniższe tabele, aby umożliwić użytkownikom przechowywanie dodatkowych informacji o stanie zdrowia.
immunization
tabela przechowuje szczegółowe informacje o szczepieniach otrzymanych przez osoby z profilu. Po przykładzie zobaczysz krótki opis kolumn zawartych w tej tabeli:
Przykład – John Soo otrzymał drugą z trzech dawek szczepionki przeciwko wirusowemu zapaleniu wątroby typu B. Podał ją dr David Moore w dniu 28.11.2016. Szczepionka została podana przez zastrzyk w lewą rękę. Jest produkowany przez Cipla (firmę farmaceutyczną).
id
– Klucz podstawowy tej tabeliuser_profile_id
– Odnosi się douser_profile_ID
Johna Soovaccination_name
– „WZW B”dt_received
– „28 listopada 2016”number_in_sequence
– „02”body_area_id
– Identyfikator lewej ręki, odniesiony zbody_area
stółprovider_name
- "Dr. David Moore”how_administered
– „wstrzyknięty” (inne możliwe wartości obejmują aerozol do nosa, tabletki, krople, syrop )manufacturer
– „Cipla”
allergy
tabela przechowuje szczegóły dotyczące wszelkich alergii doświadczanych przez osoby z profilu. Poniżej znajduje się lista kolumn, z odpowiednimi wartościami podanymi dla każdej, jak na przykładzie:
Przykład – Alison D’Souza kaszle podczas jedzenia jogurtu. Po raz pierwszy miała tę reakcję, gdy miała 8 lat. Konsultuje się z dr Billem Smithem, który przepisuje lekarstwa i doradza pewne środki ostrożności. Ta alergia nadal się utrzymuje, ale jej intensywność jest teraz mniejsza.
id
– Klucz podstawowy tabeliuser_profile_id
– Odnosi siędouser_profile_id
Alison D’Souzaallergy_type_id
– Odnosi się do identyfikatora typu alergii „Jedzenie” wallergy_type
stół. (allergy_type
tabela definiuje różne typy alergii, takie jak żywność, leki, środowiskowe, zwierzęce, roślinne itp.)allergy_reaction_id
– Odnosi się do identyfikatora reakcji alergicznej „kaszel” wallergy_reaction
tabeli.first_observed
– Data pierwszego zaobserwowania tej reakcji, czyli kiedy Alison miała 8 lat.consulting_doctor_name
- "Dr. Bill Smith”treatment_brief
– Krótki opis przepisanych leków i zalecanych środków ostrożności.does_treatment_cure_allergy
– „Częściowo utwardzony. Zmniejszona intensywność reakcji”.
family_history
tabela przechowuje szczegóły dotyczące historii medycznej rodziny użytkowników. Ponownie wymieniliśmy kolumny i rodzaj informacji, które będą w nich przechowywane, na podstawie poniższego przykładu.
Przykład – Matka Diany, Lisa, ma chorobę Parkinsona (zaburzenie neurologiczne). Przeszła leczenie, ale nie uzyskała namacalnej poprawy.
id
– klucz podstawowy tabeliuser_profile_id
–user_profile_ID
Diany zuser_profile
stółRelationship_id
– Identyfikator „matki” zrelationship
stółRelative_name
– „Lisa”Date_of_birth
– data urodzenia LisyDate_of_death
– NULL (Lisa wciąż żyje i ciężko walczy z chorobą.)Condition_brief
– Krótki opis tego, jak, kiedy i gdzie zaczął się stan chorobowy, konsultacje, jakakolwiek ulga itp.Current_status
– „Bieżący” (Inne możliwe statusy to „Przerywany” i „Przeszłość”).How_it_ended
– NULL
Co byś dodał do tego modelu danych?
System informuje ludzi, ile kalorii spalają podczas wykonywania różnych czynności, ale nie śledzi, ile kalorii spożywają ani jak pożywne są ich wybory żywieniowe. Ponadto system pozwala im codziennie rejestrować dane dotyczące kondycji, ale nie pozwala im wyznaczać celów, formułować planu i śledzić postępów, aby zachować motywację.
Czy powinniśmy rozważyć wbudowanie w to tych funkcji? Jakie zmiany należy wprowadzić, aby dodać te funkcje?
Podziel się z nami swoimi pomysłami!