健康で健康であることは、流行ではなくライフスタイルです。健康の価値を認識している人々は、健康に関連するすべての事実を記録し、それを優先します。この記事では、健康とフィットネスのアプリケーションの背後にあるデータベースの設計を検証します。
ユーザーが自分の健康とフィットネスの情報をログに記録できるようにするアプリケーションはたくさんあります。 Apple、Google、Microsoftなどの大手企業が、この市場向けに独自の開発APIを立ち上げました。たとえば、Googleには「Fit」があり、Microsoftには「HealthVault」があります。
この記事では、健康記録アプリケーションの背後にあるデータモデルについて説明します。まず、そのようなアプリに期待されることを正確に説明しましょう。
健康情報アプリのプロジェクト要件
以下は、健康情報アプリがサポートする必要のあるいくつかの機能です。
- ユーザーはアカウントを作成し、複数のプロファイルの健康情報を保存できます。つまり、個人は家族全員の健康情報を保存できます。
- ユーザーは、免疫、過去の検査結果、アレルギー、家族の病歴など、自分の健康履歴全体を記録できます 。
- ユーザーは、血糖値(血糖値)、血圧、体組成、肥満度指数(BMI)、コレステロール、身長、体重、生殖の健康などの寸法など、健康とフィットネスのさまざまな測定値を保存できます。
- 情報は、さまざまな方法と測定単位を使用して記録できます。 。例として、血糖値はmg/dLまたはmmol/Lで測定できます。
- ユーザーが保存できる情報の量に制限はありません。
- システムは、血圧やBMI値など、受け入れられている健康基準も保持し、ユーザーの数値が「安全」または「正常」の範囲外になった場合にユーザーに警告します。
- ユーザーは、個人のダッシュボードに表示する情報(血糖値、身長、体重など)を選択することもできます。このようにして、必要なものは何でも監視できます。
各セクションとテーブルがデータモデルで何をするかを単に説明するのではなく、それに関するいくつかの質問に答えましょう。さまざまなテーブルの機能は、進むにつれて明らかになります。
まず、必要に応じて完全なデータモデルを確認できます。
データモデル
健康情報データモデルに関する質問への回答
ユーザーはどのようにして家族全員の健康情報を個別に保存できますか?
まず、アカウントとプロファイルの管理について説明しましょう。 。これは、2つの異なるテーブルを持つことで実現できます。 1つ(user_account
)アプリケーションに登録するユーザーの詳細と1つ(user_profile
)登録ユーザーが作成するすべての異なるプロファイルの詳細をログに記録します。人々は多くのプロファイルを作成できます-例えば。家族ごとに1つ。
これを可能にするさまざまなテーブルを見てみましょう。
user_account
表には、アプリケーションに登録する人に関する基本的な詳細が含まれています。その列は次のとおりです。
-
id
–各ユーザーを一意に識別するこのテーブルの代理キー列。 -
login_name
–ユーザーがログイン名として選択した名前またはその他のID。すべてのログイン名が異なるようにするには、この列に一意の制約を課す必要があります。 -
enc_password
–暗号化された形式のユーザーが選択したアカウントパスワード。 - アドレス列 –登録時のユーザーの住所と連絡先の詳細を保存します。これらの列には、
street_address
が含まれます 、city
、state
、country
、およびzip
。これらのフィールドは登録プロセスではオプションであるため、これらの列はnull許容として保持しています。 -
contact_number
およびemail
–ユーザーの連絡先番号(電話番号など)とメールアドレスを保存します。これらのフィールドも登録プロセスの一部ですが、null許容ではありません。 -
is_active
–アカウントが現在アクティブであるかどうかを示すために、「Y」または「N」のいずれかを保持します。 -
account_image
–ユーザーは自分の画像をアップロードできます。ユーザーはアカウントごとにゼロまたは(最大)1つの画像をアップロードできるため、これはnull許容のBLOBタイプの列です。
user_profile
テーブルには、登録ユーザーが作成したすべてのプロファイルの詳細が格納されます。この表の列は次のとおりです。
-
id
–新しいプロファイルごとに割り当てられた一意の番号。 -
user_account_id
–プロファイルを作成したユーザーを示します。 -
user_profile_name
–プロファイルに人の名前を保存します。 (この人を「プロファイル担当者」と呼び、プロファイルを作成するユーザーを「アカウント所有者」と呼びます。) -
relationship_id
–アカウント所有者とプロファイル担当者の関係を示します。この列は、relationship
テーブル。可能なすべてのタイプの関係( self など)を保持します。 、母 、父 、姉妹 、兄弟 、息子 、娘 、ペット など)。 email
–この列には、プロファイル担当者の電子メールアドレスが保持されます。レポートまたはその他の情報は、この電子メールを介して彼らと共有されます。情報はアカウント所有者にも送信されます。たとえば、メリッサが娘のエヴァのプロフィールを作成した場合、エヴァの情報はメリッサのメールに送信され、場合によってはエヴァのメールに送信されます。以下を参照してください。-
is_report_sharing_enabled
–レポートは常にアカウント所有者と共有されますが、このデータをプロファイル担当者と共有することはオプションです。この列には、プロフィール担当者と情報を共有するかどうかが表示されます。 -
is_active
–プロファイルが現在アクティブであるかどうかを識別します。これは、プロファイルが誤って削除された場合のソフト削除機能です。 -
profile_image
–プロフィール人物の画像を保存します。この属性はオプションであるため、null許容です。
characteristic_data
表には、時間の経過とともに変化することのない個々のプロファイルの詳細(血液型など)が含まれています。この表のすべての列は、fitzpatrick_skin_type
を除いて自明です。 、I(常に火傷、日焼けしない)からVI(火傷しない、日焼けしても外観に変化がない)までの肌の性質を分類します。
性別の列を2つ追加しました。 biological_gender
出生時の性別を示し、current_gender
プロファイル担当者の現在の性別を示します。この2番目の列はトランスジェンダーの人々にのみ適用されるため、null許容のままにしました。
このシステムにはどのような重要な情報を保存できますか?どのように保存されますか?
次に、健康データ管理に移ります。 。体組成、血糖値、および体の寸法は、別々のテーブルに保存されます。ただし、一度に複数の種類の情報を入力できるため、body_vitals_log
プロファイルにログインしている情報と入力された情報を追跡するためのテーブル。
すべての重要な統計は、次の表に保持されています:
-
body_composition
–脂肪、除脂肪体重、骨、水分など、さまざまな体組成のパーセンテージに関する詳細を保存します。また、個人のBMI(ボディマス指数)値も保持します。 -
blood_cholesterol
– LDL、HDL、トリグリセリド、合計などのコレステロールの詳細を保持します。 -
body_dimension
–ウエストや胸の測定値など、さまざまな体の部位の寸法を記録します。 -
body_weight
–体重の値を保存します。 -
body_height
–人の身長の値を保持します。 -
blood_pressure
–血圧値(収縮期および拡張期)を保持します。 -
blood_glucose
–血糖値を記録します。
上記の表のほとんどの列は、いくつかの例外を除いて、自明です。 measurement_method_id
のような追加の列がいくつかあります。 、compare_to_normal_id
、measurement_unit_id
およびmeasurement_context
これらのテーブルのほぼすべてで。これらの列については後で説明します。
body_vitals_log
プロファイルの特定の時間にログに記録される情報を追跡します。この表の列は次のとおりです。
-
user_profile_id
–どのプロファイルが情報をログに記録しているかを示します。 -
dt_created
–情報が入力された日時を保存します。 -
data_source_id
–マニュアル、電子機器などのデータのソースを示します。 - さまざまな人口動態統計のD –ユーザーは一度に1つ以上のアイテムをログに記録できるため、これらの列はすべてnull許容にしています。すべてのユーザーが同じ健康統計を追跡したいと思うわけではありません。
システムをさまざまな地域で機能させるにはどうすればよいですか?
一部の情報は、さまざまな領域でさまざまな単位で測定されます。たとえば、体重はアジアではキログラムで測定されますが、北米ではポンドで測定されます。したがって、これをデータベースで機能させるには、測定単位を追跡する方法が必要です。
-
id
–このテーブルの主キーとして機能し、他のテーブルが参照するキーです。 -
measurement_parameter
–単位が測定する重要な情報の種類(体重、身長、血圧など)を示します。 -
unit_name
–ユニットの名前を格納します。体重はキログラムとポンド、血糖値はmg/dLとmmol/Lと考えてください。
人々は自分の数が良いかどうかをどうやって知るのでしょうか?
私たちのシステムは、人々に健康上のリスクや脆弱性を警告しない限り、あまり役に立ちません。 comparison_to_normal_id
を追加することで、この関数を有効にします。 すべての重要な情報データテーブルの列。
新しい重要な情報がシステムにログインすると、レコードが対応するベンチマーク値と比較され、それに応じてこの列が設定されます。
このテーブルで可能な値は次のとおりです。
I | テキスト |
---|---|
1 | わからない |
2 | はるかに低い |
3 | 低い |
4 | 通常 |
5 | 高い |
6 | はるかに高い |
ユーザーは測定が行われたときに記録できますか?
たとえば、ユーザーは血糖値がいつ測定されたか、つまり食事の前または後に述べる必要がある場合があります。または、運動の前後に体重を測定して結果を記録することもできます。これを容易にするために、measurement_context
という列を追加しました 、コンテキスト情報を必要とする可能性のある重要な情報テーブル。この列のいくつかの可能な値を以下に示します。
朝食前 |
朝食後 |
昼食前 |
昼食後 |
夕食前 |
夕食後 |
運動前 |
運動後 |
断食 |
非断食 |
食後 |
食事前 |
就寝前 |
糖尿病で血糖値を監視する必要がある場合はどうなりますか?
私が提案しているシステムには、重要な統計情報をグラフ形式で表示できるダッシュボードがあります。ユーザーは、プロファイルダッシュボードに表示する内容を選択でき、各プロファイルには独自のダッシュボードがあります。アカウント所有者は、作成したすべてのプロファイルダッシュボードを表示できます。
ダッシュボードに表示できるパラメーターごとに1つのCHAR(1)列を追加しました。デフォルトでは、新しいプロファイルが作成されると、すべての列に「N」(表示がオフ)が入力されます。ユーザーは、アプリのユーザーインターフェースのオプションからダッシュボードの構成を後で変更できます。
このシステムは人々の健康維持にどのように役立ちますか?
つまり、フィットネスデータストレージについて話しているのです。 。このシステムでは、健康情報に加えて、ユーザーがフィットネスや運動のルーチンに関する情報を記録することもできます。
activity_log
テーブルは、このサブジェクトエリアのメインテーブルです。これは、人が実行するあらゆる種類のアクティビティプロファイルに関する詳細をキャプチャします。
すべてのアクティビティは、次の3つのパラメータの1つ以上で測定できます。
- 開始時間と終了時間 –スポーツやゲームをしたり、列に並んだりするなどの活動は、開始時間と終了時間の観点から測定されます。これは、
start_time
を介して行われます。 およびend_time
activity_log
。 - 対象距離 –ランニングやサイクリングなどのアクティビティは、走行距離で測定されます。これは
distance_covered
に保存されます 列。 - 歩数 –ウォーキングなどのアクティビティは歩数で測定され、値は
steps_count
に保存されます。 列。
なぜcalories_burnt
なのか疑問に思われるでしょう。 列はactivity_log
テーブル。その名前が示すように、この列は、特定の活動をしている間にプロフィールの人が消費したカロリーの値を保持します。これらの値を計算する方法については、後のセクションで説明します。
activity
すべての可能な活動のリストを保持します。この表の列は次のとおりです。
-
id
–各アクティビティに一意のID番号を割り当てます。 -
activity_name
–アクティビティ名を保存します。 -
activity_multiplier
–この列は、活動を行う人々が消費するカロリー数を計算する上で重要な役割を果たします。
各アクティビティの消費カロリーをどのように計算しますか?
カロリー燃焼の計算方法を理解するには、まず人のBMR、つまり基礎代謝率を理解する必要があります。これは、体が安静時に燃焼するカロリー数を示しています。各人のBMRは、性別、年齢、体重、身長によって異なります。データモデリングの観点からは、BMRはゆっくりと変化する次元であり、そのため、時間とともに変化し続けます。最新の個々のBMR値をuser_bmr
テーブル。
BMR値の計算に使用されるさまざまな方法があります:
方法#1:ハリス-ベネディクト法
BMR男性:66 +(6.23 X体重(ポンド))+(12.7 X高さ(インチ))–(6.8 X年齢)
BMR女性:655 +(4.35 X体重(ポンド))+(4.7 X高さ(インチ))–(4.7 X年齢)
メソッド#2:Katch-McArdleメソッド
BMR(男性+女性):370 +(21.6 *除脂肪体重(キログラム))
人のBMRと上記の活動乗数を使用して、特定の活動を行うときに人が消費するカロリー数を調べることができます。式は次のとおりです。
消費カロリー=アクティビティ乗数*BMR
注:上記のBMR計算方法はどちらも、アクティビティに同じ乗数値を使用します。詳細については、この記事を参照してください。
プロファイルの過去のBMR値を維持できますか?
はい。 BMR値はuser_bmr_archive
テーブル。
まず、id_version
という1つの列を追加します。 、既存のuser_bmr
テーブル。プロファイル担当者のBMR値が更新されるたびに、この値を1ずつ増やしていきます。
user_bmr_archive
テーブルは、ほぼuser_bmr
テーブル。唯一の違いは、dt_expired
があることです。 dt_created
の代わりに列 およびdt_modified
列。 dt_expired
列には、バージョンが無効になった日付、つまりBMR値がuser_bmr
。
ユーザーが免疫化、家族の病歴、およびアレルギーの記録を保持したい場合はどうなりますか?
このシステムは、次のテーブルを活用して、ユーザーが追加の健康情報を保存できるようにします。
immunization
表には、プロファイル担当者が受けた免疫に関する詳細が格納されています。例の後に、このテーブルに含まれる列の簡単な説明が表示されます。
例– John Sooは、B型肝炎ワクチンの3回接種のうち2回目を接種しました。 2016年11月28日にデビッド・ムーア博士によって投与されました。ワクチン接種は左手への注射によって行われました。 Cipla(製薬会社)によって製造されています。
-
id
–このテーブルの主キー -
user_profile_id
–user_profile_ID
を参照します ジョン・スの -
vaccination_name
–「B型肝炎」 -
dt_received
–「2016年11月28日」 -
number_in_sequence
–「02」 -
body_area_id
–body_area
テーブル provider_name
–「博士。デビッド・ムーア」-
how_administered
–「注入された」(他の可能な値には、点鼻薬、錠剤、滴、シロップが含まれます ) manufacturer
–「シプラ」
allergy
表には、プロファイル担当者が経験したアレルギーに関する詳細が格納されています。以下は列のリストであり、例に従ってそれぞれに関連する値が示されています。
例– Alison D’Souzaは、ヨーグルトを食べると咳をします。彼女は8歳のときに最初にこの反応を示しました。彼女はビル・スミス博士に相談します。ビル・スミス博士はいくつかの薬を処方し、特定の予防措置をアドバイスします。このアレルギーはまだ続いていますが、その強度は今では低くなっています。
-
id
–テーブルの主キー -
user_profile_id
–user_profile_id
に転送します アリソン・ドゥーザの -
allergy_type_id
–allergy_type
テーブル。 (allergy_type
表は、食品、医薬品、環境、動物、植物などのさまざまなアレルギーの種類を定義しています。 -
allergy_reaction_id
–allergy_reaction
テーブル。 -
first_observed
– この反応が最初に観察された日付、つまりアリソンが8歳だった日付。 -
consulting_doctor_name
–「博士。ビル・スミス」 -
treatment_brief
–処方された薬の簡単な説明と推奨される注意事項。 -
does_treatment_cure_allergy
–「部分的に治癒しました。反応の強度が低下しました。」
family_history
表には、ユーザーの病歴に関する詳細が格納されます。ここでも、次の例に基づいて、列とその列に格納される情報の種類をリストしました。
例– ダイアナの母親のリサはパーキンソン病(神経障害)を患っています。彼女は治療を受けていますが、目に見える改善は見られません。
-
id
–テーブルの主キー -
user_profile_id
–Dianaのuser_profile_ID
user_profile
テーブル -
Relationship_id
–relationship
テーブル -
Relative_name
–「リサ」 -
Date_of_birth
–リサの生年月日 -
Date_of_death
– NULL (リサはまだ生きていて、病気と激しく戦っています。) -
Condition_brief
– 状態がどのように、いつ、どこで始まったか、相談、救済などの簡単な説明。 -
Current_status
–「現在」(その他の可能なステータスは「断続的」および「過去」です。) -
How_it_ended
– NULL
このデータモデルに何を追加しますか?
このシステムは、さまざまな活動を行っているときに消費したカロリー数を人々に知らせますが、消費したカロリー数や、選択した食品の栄養価は追跡しません。また、このシステムでは、フィットネスデータを毎日記録できますが、目標を設定したり、計画を立てたり、進捗状況を追跡したりして、意欲を維持することはできません。
これらの機能を組み込むことを検討する必要がありますか?これらの機能を追加するには、どのような変更を加える必要がありますか?
あなたのアイデアを教えてください!