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

Datový model pro sledování vašeho nejcennějšího majetku

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 a zip . Protože jsou tato pole v procesu registrace nepovinná, ponechal jsem tyto sloupce jako nullable.
  • contact_number a email – 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 na relationship 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:


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 a end_time sloupce v activity_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).

  • idPrimární klíč této tabulky
  • user_profile_idOdkazuje na user_profile_ID Johna Soo
  • vaccination_name – „Hepatitida B“
  • dt_received – „28. listopadu 2016“
  • number_in_sequence – „02“
  • body_area_idID levé ruky, odvozené z body_area stůl
  • provider_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íč tabulky
  • user_profile_id – Zoznačuje user_profile_id Alison D’Souza
  • allergy_type_idOdkazuje na ID pro typ alergie „Potraviny“ v allergy_type stůl. (allergy_type tabulka definuje různé typy alergií, jako jsou potraviny, léky, prostředí, zvířata, rostliny atd.)
  • allergy_reaction_idOdkazuje na ID alergické reakce „Kašel“ v allergy_reaction tabulka.
  • first_observedDatum, kdy byla tato reakce poprvé pozorována, tj. když bylo Alison 8 let.
  • consulting_doctor_name – „Dr. Bill Smith“
  • treatment_briefKrá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í.

  • idprimární klíč tabulky
  • user_profile_idDianino user_profile_ID z user_profile stůl
  • Relationship_idID ‚matky‘ z relationship stůl
  • Relative_name – „Lisa“
  • Date_of_birthLisino datum narození
  • Date_of_death – NULL (Lisa je stále naživu a tvrdě bojuje s nemocí.)
  • Condition_briefKrá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!


  1. Převést „datetime2“ na „datetime“ v SQL Server (příklady T-SQL)

  2. Jak získat dotaz na atributy sloupců z názvu tabulky pomocí PostgreSQL?

  3. Možnosti multitenance pro PostgreSQL

  4. Nahraďte duplicitní mezery jednou mezerou v T-SQL