Být zdravý a fit je životní styl, ne módní záležitost. Lidé, kteří si uvědomují hodnotu zdraví, z něj činí prioritu a vedou si záznamy o všech faktech týkajících se jejich fitness. V tomto článku prozkoumáme návrh databáze aplikace pro zdraví a kondici.
Existuje mnoho aplikací, které uživatelům umožňují zaznamenávat informace o jejich zdraví a kondici. Několik velkých hráčů jako Apple, Google a Microsoft spustilo svá vlastní vývojová rozhraní API speciálně pro tento trh. Například Google má „Fit“ a Microsoft má „HealthVault“.
V tomto článku vysvětlím datový model aplikace zdravotních záznamů. Nejprve si proberme, co přesně bychom od takové aplikace očekávali.
Požadavky projektu na aplikaci Health Info
Níže jsou uvedeny některé funkce, které by aplikace s informacemi o zdraví měla podporovat:
- Uživatelé si mohou vytvořit účet a ukládat zdravotní informace pro více profilů, tj. jednotlivec může ukládat zdravotní údaje všech členů své rodiny.
- Uživatelé mohou zaznamenat celou svou zdravotní historii, včetně imunizací, minulých laboratorních výsledků, alergií a rodinné anamnézy .
- Uživatelé mohou ukládat různá měření zdraví a kondice, jako je hladina glukózy v krvi (krevního cukru), krevní tlak, složení těla a rozměry včetně indexu tělesné hmotnosti (BMI), cholesterolu, výšky, hmotnosti, reprodukčního zdraví atd. li>
- Informace lze zaznamenávat pomocí různých metod a jednotek měření . Například glykémii lze měřit v mg/dl nebo mmol/l.
- Neexistují žádná omezení množství informací, které mohou uživatelé ukládat.
- Systém bude také dodržovat uznávané zdravotní standardy, jako je krevní tlak nebo čísla BMI, a upozorní uživatele, pokud jejich čísla spadají mimo „bezpečný“ nebo „normální“ rozsah.
- Uživatelé si také mohou vybrat informace (jako je hladina glukózy v krvi, výška, hmotnost atd.), které se zobrazí na jejich osobním panelu. Tímto způsobem mohou sledovat, co potřebují.
Spíše než jednoduše vysvětlovat, co každá sekce a tabulka dělá v datovém modelu, odpovězme si na některé otázky. Funkce různých tabulek bude postupem času jasná.
Nejprve se můžete podívat na úplný datový model, pokud chcete.
Datový model
Odpovědi na otázky týkající se datového modelu zdravotních informací
Jak mohou uživatelé ukládat zdravotní informace pro všechny své rodinné příslušníky jednotlivě?
Nejprve si promluvme o Správě účtu a profilu . Toho lze dosáhnout dvěma různými tabulkami; jeden (user_account
) pro protokolování údajů o lidech, kteří se do aplikace zaregistrují, a jeden (user_profile
) pro přihlášení podrobností o všech různých profilech, které registrovaný uživatel vytvoří. Lidé si mohou vytvořit řadu profilů – např. jeden pro každého člena rodiny.
Podívejme se na různé tabulky, které to umožňují.
user_account
tabulka obsahuje základní údaje o osobě registrující se do aplikace. Jeho sloupce jsou:
id
– Sloupec náhradního klíče pro tuto tabulku, který jednoznačně identifikuje každého uživatele.login_name
– Jméno nebo jiné ID, které si uživatel zvolí jako své přihlašovací jméno. Na tento sloupec musí být zavedeno jedinečné omezení, aby bylo zajištěno, že každé přihlašovací jméno bude jiné.enc_password
– Uživatelem zvolené heslo účtu v zašifrované podobě.- sloupce adres – Ukládá adresu a kontaktní údaje uživatelů v době registrace. Tyto sloupce zahrnují
street_address
,city
,state
,country
azip
. Protože jsou tato pole v procesu registrace nepovinná, ponechal jsem tyto sloupce jako nullable. contact_number
aemail
– Ukládá kontaktní číslo uživatele (tj. telefonní číslo) a jeho e-mailovou adresu. Tato pole jsou také součástí registračního procesu, ale nelze u nich použít hodnotu null.is_active
– Drží buď „Y“ nebo „N“, které označuje, zda je účet aktuálně aktivní.account_image
– Uživatelé mohou nahrávat své vlastní obrázky. Protože uživatel může nahrát nula nebo (maximálně) jeden obrázek na účet, jedná se o sloupec typu BLOB s možnou hodnotou null.
user_profile
tabulka ukládá podrobnosti o všech profilech vytvořených registrovanými uživateli. Sloupce v této tabulce jsou:
id
– Jedinečné číslo přiřazené každému novému profilu.user_account_id
– Označuje, který uživatel vytvořil profil.user_profile_name
– Uloží jméno osoby do profilu. (Tuto osobu budeme nazývat „profilová osoba“ a uživatele, který profily vytváří, „majitel účtu“.)relationship_id
– Označuje vztah mezi majitelem účtu a profilovou osobou. Tento sloupec odkazuje narelationship
tabulka, která obsahuje všechny možné typy vztahů (jako self , matka , otec , sestra , bratr , syn , dcera , domácí mazlíček , atd.).email
– Tento sloupec obsahuje e-mailovou adresu osoby v profilu. Prostřednictvím tohoto e-mailu s nimi budou sdíleny zprávy nebo jiné informace; informace budou zaslány také majiteli účtu. Pokud by například Melissa vytvořila profil pro svou dceru Evu, byly by Eviny informace zaslány na Melissin e-mail a možná i na Evin e-mail – viz níže.is_report_sharing_enabled
– Přehledy jsou vždy sdíleny s majitelem účtu, ale sdílení těchto údajů s osobou profilu je volitelné. Tento sloupec ukazuje, zda budou informace sdíleny s osobou v profilu.is_active
– Identifikuje, zda je profil aktuálně aktivní. Toto je funkce měkkého odstranění v případě, že dojde k náhodnému smazání profilů.profile_image
– Ukládá obrázek profilové osoby. Tento atribut je nepovinný, a proto lze použít hodnotu null.
characteristic_data
tabulka obsahuje podrobnosti o jednotlivých profilech (jako je krevní skupina), které se v průběhu času nikdy nemění. Všechny sloupce v této tabulce jsou samozřejmé kromě fitzpatrick_skin_type
, která klasifikuje povahu pokožky od I (vždy se spálí, nikdy se neopálí) do VI (nikdy se nespálí, při opálení se vzhled nezmění).
Přidal jsem dva sloupce pro pohlaví; biological_gender
označuje pohlaví člověka v době narození a current_gender
označuje aktuální pohlaví profilové osoby. Tento druhý sloupec je použitelný pouze pro transgender osoby, a proto jsem ho nechal neplatný.
Jaké důležité informace lze v tomto systému ukládat? Jak je uložen?
Nyní přejdeme ke Správě zdravotních údajů . Tělesné složení, hladina glukózy v krvi a tělesné rozměry jsou uloženy v samostatných tabulkách. Lidé však mohou zadat více než jeden typ informací najednou, proto používáme body_vitals_log
tabulka, abyste měli přehled o tom, jaké informace jsou přihlášeny do profilu a kdy jsou zadány.
Všechny důležité statistiky jsou uloženy v následujících tabulkách:
body_composition
– Ukládá podrobnosti o různých procentech složení těla, jako je tuk, libová hmota, kosti nebo voda. Obsahuje také hodnoty BMI (body mass index) pro jednotlivce.blood_cholesterol
– Uchovává podrobnosti o cholesterolu, jako je LDL, HDL, triglyceridy a celkový.body_dimension
– Zaznamenává rozměry různých oblastí těla, jako jsou míry pasu nebo hrudníku.body_weight
– Ukládá hodnoty tělesné hmotnosti.body_height
– Obsahuje hodnoty pro výšku osoby.blood_pressure
– Udržuje čísla krevního tlaku (systolický a diastolický).blood_glucose
– Zaznamenává hladinu glukózy v krvi.
Většina sloupců ve výše uvedených tabulkách je až na pár výjimek samozřejmá. Všimnete si dalších sloupců, jako je measurement_method_id
, compare_to_normal_id
, measurement_unit_id
a measurement_context
téměř v každé z těchto tabulek. Tyto sloupce vysvětlím později.
body_vitals_log
sleduje, jaké informace jsou v daném čase pro profil zaznamenávány. Sloupce v této tabulce jsou:
user_profile_id
– Zobrazuje, který profil zaznamenává informace.dt_created
– Ukládá datum a čas, kdy jsou informace zadány.data_source_id
– Označuje zdroj dat, jako je příručka, elektronické zařízení atd.- IDs různých důležitých statistik – Ponechal jsem všechny tyto sloupce s nulovou hodnotou, protože uživatelé mohou přihlásit jednu nebo více položek najednou. Ne všichni uživatelé budou chtít sledovat stejné zdravotní statistiky.
Jak můžeme zajistit, aby systém fungoval v různých regionech?
Některé informace se měří v různých jednotkách v různých oblastech. Například v Asii se tělesná hmotnost měří v kilogramech, ale v Severní Americe se měří v librách. Aby to v naší databázi fungovalo, potřebujeme způsob, jak sledovat měrné jednotky.
id
– Slouží jako primární klíč této tabulky a je to ten, na který odkazují ostatní tabulky.measurement_parameter
– Označuje typ důležitých informací (jako je váha, výška, krevní tlak atd.), které jednotka měří.unit_name
– Uloží název jednotky. Myslete na kilogram a libru jako váhu, mg/dl a mmol/l na glykémii.
Jak lidé poznají, zda jsou jejich čísla dobrá?
Náš systém moc nepomůže, pokud neupozorňuje lidi na zdravotní rizika nebo zranitelnosti. Tuto funkci aktivujeme přidáním comparison_to_normal_id
ve všech tabulkách důležitých informací.
Když jsou do systému přihlášeny jakékoli nové životně důležité informace, záznamy budou porovnány s jejich odpovídajícími referenčními hodnotami a podle toho bude nastaven tento sloupec.
Možné hodnoty pro tuto tabulku jsou:
Já | Text |
---|---|
1 | Nevím |
2 | Mnohem nižší |
3 | Nižší |
4 | Normální |
5 | Vyšší |
6 | Mnohem vyšší |
Mohou uživatelé zaznamenávat, kdy byla měření provedena?
Uživatelé mohou například potřebovat uvést, kdy jim byla naměřena glykémie – tj. před jídlem nebo po jídle. Nebo se mohou vážit a zaznamenávat výsledky před a po cvičení. Abych to usnadnil, přidal jsem sloupec measurement_context
, v tabulkách důležitých informací, které mohou vyžadovat kontextové informace. Některé možné hodnoty pro tento sloupec jsou uvedeny níže:
Před snídaní |
Po snídani |
Před obědem |
Po obědě |
Před večeří |
Po večeři |
Před cvičením |
Po cvičení |
Půst |
Nepůst |
Po jídle |
Před jídlem |
Před spaním |
Co když je člověk diabetik a potřebuje sledovat hladinu glukózy v krvi?
Systém, který navrhuji, bude mít řídicí panel, který může zobrazovat důležité statistiky v grafickém formátu. Uživatelé si mohou vybrat, co by chtěli vidět na řídicím panelu svého profilu, a každý profil má svůj vlastní řídicí panel. Majitelé účtů mohou vidět všechny panely profilu, které vytvořili.
Přidal jsem jeden sloupec CHAR(1) pro každý parametr, který lze zobrazit na řídicím panelu. Ve výchozím nastavení by všechny sloupce byly vyplněny „N“ (displej je vypnutý), když je vytvořen nový profil. Uživatelé mohou později upravit konfiguraci řídicího panelu pomocí možnosti v uživatelském rozhraní aplikace.
Jak tento systém pomáhá lidem zůstat fit?
Jinými slovy, mluvíme o úložišti dat ve fitness . Kromě informací o zdraví systém také umožňuje uživatelům zaznamenávat informace o jejich fitness a cvičení.
activity_log
tabulka je hlavní tabulka v této oblasti. Zachycuje podrobnosti o každém druhu profilu činnosti, který osoby vykonávají.
Každá aktivita může být měřena jedním nebo více z následujících tří parametrů:
- Čas zahájení a ukončení – Činnosti, jako je hraní sportů nebo her, stání ve frontě atd., se měří z hlediska času začátku a konce. To se provádí pomocí
start_time
aend_time
sloupce vactivity_log
. - Ujetá vzdálenost – Činnosti, jako je běh nebo jízda na kole, se měří podle ujeté vzdálenosti. To je uloženo v
distance_covered
sloupec. - Počet kroků – Činnosti, jako je chůze, se měří jako počet kroků a hodnoty se ukládají do
steps_count
sloupec.
Určitě vás zajímá, proč calories_burnt
sloupec je v activity_log
stůl. Jak název napovídá, tento sloupec obsahuje hodnotu kalorií spálených profilovou osobou při provádění konkrétní činnosti. Jak můžeme tyto hodnoty vypočítat, vysvětlím v další části.
Vytvořil jsem jednu tabulku s názvem activity
vést seznam všech možných aktivit. Sloupce v této tabulce jsou:
id
– Přiřadí každé aktivitě jedinečné ID číslo.activity_name
– Ukládá názvy aktivit.activity_multiplier
– Tento sloupec hraje klíčovou roli při výpočtu počtu kalorií spálených lidmi provozujícími aktivity.
Jak vypočítáte spálené kalorie pro každou aktivitu?
Abychom pochopili, jak vypočítat spálené kalorie, musíme nejprve porozumět BMR nebo bazálnímu metabolismu. To nám říká, kolik kalorií tělo spálí v klidu. BMR každého člověka závisí na jeho pohlaví, věku, váze a výšce. Z pohledu datového modelování je BMR pomalu se měnící dimenzí a jako taková se neustále mění s časem. Poslední jednotlivé hodnoty BMR uložíme do user_bmr
stůl.
Pro výpočet hodnot BMR se používají různé metody:
Metoda č. 1:Harris-Benedictova metoda
BMR Muži:66 + (6,23 x váha v librách) + (12,7 x výška v palcích) – (6,8 x věk)
BMR ženy:655 + (4,35 x váha v librách) + (4,7 x výška v palcích) – (4,7 x věk)
Metoda č. 2:Metoda Katch-McArdle
BMR (muži + ženy):370 + (21,6 * libová hmotnost v kilogramech)
Lean Mass =hmotnost v kilogramech – (hmotnost v kilogramech * % tělesného tuku v %)
Můžeme použít BMR člověka a výše uvedený multiplikátor aktivity, abychom zjistili, kolik kalorií člověk spálí při dané aktivitě. Vzorec je:
Spálené kalorie =multiplikátor aktivity * BMR
Poznámka:Obě výše uvedené metody výpočtu BMR používají pro činnosti stejné hodnoty multiplikátoru. Další informace naleznete v tomto článku.
Můžeme zachovat historické hodnoty BMR profilů?
Ano. Hodnoty BMR můžeme archivovat v user_bmr_archive
stůl.
Začneme přidáním jednoho sloupce, id_version
, na stávající user_bmr
stůl. Tuto hodnotu neustále zvyšujeme o 1 pokaždé, když se aktualizuje hodnota BMR profilové osoby.
user_bmr_archive
tabulka je téměř replikou user_bmr
stůl. Jediný rozdíl je v tom, že má dt_expired
namísto dt_created
a dt_modified
sloupců. dt_expired
sloupec ukládá datum, kdy se verze stala neplatnou, tj. kdy je aktualizována hodnota BMR v user_bmr
.
Co když si uživatelé chtějí vést záznamy o svých imunizacích, rodinné anamnéze a alergiích?
Tento systém využívá následující tabulky, aby uživatelům umožnil ukládat další zdravotní informace.
immunization
tabulka ukládá podrobnosti o imunizacích přijatých lidmi z profilu. Po příkladu uvidíte stručný popis sloupců, které tato tabulka obsahuje:
Příklad – John Soo dostal druhou ze tří dávek vakcíny proti hepatitidě B. Aplikoval ji Dr. David Moore dne 28. listopadu 2016. Očkování bylo provedeno injekcí do levé ruky. Vyrábí ho Cipla (farmaceutická společnost).
id
– Primární klíč této tabulkyuser_profile_id
– Odkazuje nauser_profile_ID
Johna Soovaccination_name
– „Hepatitida B“dt_received
– „28. listopadu 2016“number_in_sequence
– „02“body_area_id
– ID levé ruky, odvozené zbody_area
stůlprovider_name
– „Dr. David Moore“how_administered
– „Injekce“ (další možné hodnoty zahrnují nosní sprej, tabletu, kapky, sirup )manufacturer
– „Cipla“
allergy
tabulka ukládá podrobnosti o případných alergiích, které zaznamenaly osoby v profilu. Níže je seznam sloupců s příslušnými hodnotami uvedenými pro každý podle příkladu:
Příklad – Alison D’Souza zažívá kašel, když sní jogurt. Poprvé měla tuto reakci, když jí bylo 8 let. Poradí se s Dr. Billem Smithem, který předepisuje nějaké léky a radí určitá opatření. Tato alergie stále přetrvává, ale její intenzita je nyní nižší.
id
– Primární klíč tabulkyuser_profile_id
– Zoznačujeuser_profile_id
Alison D’Souzaallergy_type_id
– Odkazuje na ID pro typ alergie „Potraviny“ vallergy_type
stůl. (allergy_type
tabulka definuje různé typy alergií, jako jsou potraviny, léky, prostředí, zvířata, rostliny atd.)allergy_reaction_id
– Odkazuje na ID alergické reakce „Kašel“ vallergy_reaction
tabulka.first_observed
– Datum, kdy byla tato reakce poprvé pozorována, tj. když bylo Alison 8 let.consulting_doctor_name
– „Dr. Bill Smith“treatment_brief
– Krátký popis předepsaných léků a doporučená opatření.does_treatment_cure_allergy
– „Částečně vyléčeno. Snížená intenzita reakce.“
family_history
tabulka ukládá podrobnosti o lékařské rodinné historii uživatelů. Opět jsme uvedli sloupce a typ informací, které by v nich byly uloženy na základě následujícího příkladu.
Příklad – Dianina matka Lisa má Parkinsonovu chorobu (neurologické onemocnění). Podstoupila léčbu, ale nedosáhla žádného hmatatelného zlepšení.
id
– primární klíč tabulkyuser_profile_id
– Dianinouser_profile_ID
zuser_profile
stůlRelationship_id
– ID ‚matky‘ zrelationship
stůlRelative_name
– „Lisa“Date_of_birth
– Lisino datum narozeníDate_of_death
– NULL (Lisa je stále naživu a tvrdě bojuje s nemocí.)Condition_brief
– Krátký popis toho, jak, kdy a kde stav začal, konzultace, případná úleva atd.Current_status
– ‚Aktuální‘ (Další možné stavy jsou ‚Přerušovaný‘ a ‚Minulý‘.)How_it_ended
– NULL
Co byste přidali do tohoto datového modelu?
Systém dává lidem vědět, kolik kalorií spálí při provozování různých aktivit, ale nesleduje, kolik kalorií zkonzumují nebo jak výživné jsou jejich výběry potravin. Systém jim také umožňuje zaznamenávat údaje o své kondici na denní bázi, ale neumožňuje jim stanovit si cíl, formulovat plán a sledovat svůj pokrok, aby zůstali motivovaní.
Měli bychom zvážit zabudování těchto funkcí do něj? Jaké změny je třeba provést pro přidání těchto funkcí?
Dejte nám vědět své nápady!