Menjadi sehat dan bugar adalah gaya hidup, bukan iseng. Orang yang menyadari nilai kesehatan menjadikannya prioritas, mencatat semua fakta terkait kebugaran mereka. Dalam artikel ini, kita akan memeriksa desain database di balik aplikasi kesehatan dan kebugaran.
Ada banyak aplikasi yang memungkinkan pengguna mencatat informasi kesehatan dan kebugaran mereka. Beberapa pemain besar seperti Apple, Google, dan Microsoft telah meluncurkan API pengembangan mereka sendiri khusus untuk pasar ini. Misalnya, Google memiliki 'Fit' dan Microsoft memiliki 'HealthVault'.
Pada artikel ini, saya akan menjelaskan model data di balik aplikasi rekam kesehatan. Pertama, mari kita bahas apa yang diharapkan dari aplikasi semacam itu.
Persyaratan Proyek untuk Aplikasi Info Kesehatan
Berikut adalah beberapa fitur yang harus didukung oleh aplikasi info kesehatan:
- Pengguna dapat membuat akun dan menyimpan informasi kesehatan untuk beberapa profil, yaitu seorang individu dapat menyimpan informasi kesehatan untuk semua anggota keluarganya.
- Pengguna dapat merekam seluruh riwayat kesehatan mereka, termasuk imunisasi, hasil lab sebelumnya, alergi, dan riwayat kesehatan keluarga .
- Pengguna dapat menyimpan berbagai pengukuran kesehatan dan kebugaran, seperti kadar glukosa darah (gula darah), tekanan darah, komposisi dan dimensi tubuh termasuk indeks massa tubuh (BMI), kolesterol, tinggi badan, berat badan, kesehatan reproduksi, dll.
- Informasi dapat direkam menggunakan berbagai metode dan satuan pengukuran . Sebagai contoh, glukosa darah dapat diukur dalam mg/dL atau mmol/L.
- Tidak ada batasan berapa banyak informasi yang dapat disimpan pengguna.
- Sistem juga akan memiliki standar kesehatan yang diterima, seperti tekanan darah atau angka BMI, dan akan memperingatkan pengguna jika angka mereka berada di luar rentang “aman” atau “normal”.
- Pengguna juga dapat memilih informasi (seperti glukosa darah, tinggi badan, berat badan, dll) untuk ditampilkan di dasbor pribadi mereka. Dengan cara ini, mereka dapat memantau apa pun yang mereka butuhkan.
Daripada hanya menjelaskan apa yang dilakukan setiap bagian dan tabel dalam model data, mari kita jawab beberapa pertanyaan tentangnya. Fungsi dari berbagai tabel akan menjadi jelas seiring berjalannya waktu.
Pertama, Anda dapat melihat model data lengkap jika Anda mau.
Model Data
Menjawab Pertanyaan Tentang Model Data Info Kesehatan
Bagaimana Pengguna Menyimpan Informasi Kesehatan untuk Semua Anggota Keluarga Mereka Secara Individual?
Pertama, mari kita bicara tentang Pengelolaan Akun dan Profil . Hal ini dapat dicapai dengan memiliki dua tabel yang berbeda; satu (user_account
) untuk mencatat detail orang yang mendaftar dengan aplikasi, dan satu (user_profile
) untuk mencatat detail semua profil berbeda yang dibuat oleh pengguna terdaftar. Orang dapat membuat sejumlah profil – mis. satu untuk setiap anggota keluarga mereka.
Mari kita lihat berbagai tabel yang memungkinkan hal ini.
user_account
tabel memegang rincian dasar tentang orang yang mendaftar dengan aplikasi. Kolomnya adalah:
id
–Kolom kunci pengganti untuk tabel ini yang mengidentifikasi setiap pengguna secara unik.login_name
– Nama atau ID lain yang dipilih pengguna sebagai nama login mereka. Batasan unik harus diterapkan pada kolom ini untuk memastikan bahwa setiap nama login berbeda.enc_password
– Kata sandi akun yang dipilih pengguna, dalam bentuk terenkripsi.- kolom alamat – Menyimpan alamat dan detail kontak untuk pengguna pada saat pendaftaran. Kolom ini termasuk
street_address
,city
,state
,country
, danzip
. Karena kolom ini opsional dalam proses pendaftaran, saya telah membuat kolom ini sebagai nullable. contact_number
danemail
– Menyimpan nomor kontak pengguna (yaitu nomor telepon) dan alamat email mereka. Kolom ini juga merupakan bagian dari proses pendaftaran, tetapi tidak dapat dibatalkan.is_active
– Memegang 'Y' atau 'N' untuk menunjukkan apakah akun saat ini aktif.account_image
– Pengguna diizinkan untuk mengunggah gambar mereka sendiri. Karena pengguna dapat mengunggah nol atau (maks) satu gambar per akun, ini adalah kolom tipe BLOB yang dapat dibatalkan.
user_profile
tabel menyimpan rincian semua profil yang dibuat oleh pengguna terdaftar. Kolom dalam tabel ini adalah:
id
– Nomor unik yang ditetapkan untuk setiap profil baru.user_account_id
– Menandakan pengguna mana yang membuat profil.user_profile_name
– Menyimpan nama orang di profil. (Kami akan menyebut orang ini sebagai "orang profil" dan pengguna yang membuat profil sebagai "pemegang akun".)relationship_id
– Menunjukkan hubungan antara pemegang akun dan orang profil. Kolom ini mengacu padarelationship
tabel, yang menampung semua kemungkinan jenis hubungan (seperti diri , ibu , ayah , kakak , saudara , anak , putri , hewan peliharaan , dll).email
– Kolom ini menyimpan alamat email orang profil. Laporan atau informasi lain akan dibagikan dengan mereka melalui email ini; informasi juga akan dikirim ke pemegang rekening. Misalnya, jika Melissa membuat profil untuk putrinya Eva, informasi Eva akan dikirim ke email Melissa dan mungkin ke email Eva – lihat di bawah.is_report_sharing_enabled
– Laporan selalu dibagikan dengan pemegang akun, tetapi adalah opsional untuk membagikan data ini dengan orang profil. Kolom ini menunjukkan apakah informasi akan dibagikan dengan orang profil.is_active
– Mengidentifikasi apakah profil sedang aktif. Ini adalah fungsi penghapusan lunak jika profil terhapus secara tidak sengaja.profile_image
– Menyimpan gambar orang profil. Atribut ini opsional dan karenanya dapat dibatalkan.
characteristic_data
tabel berisi rincian profil individu (seperti golongan darah) yang tidak pernah berubah dari waktu ke waktu. Semua kolom dalam tabel ini cukup jelas kecuali fitzpatrick_skin_type
, yang mengklasifikasikan sifat kulit seseorang mulai dari I (selalu terbakar, tidak pernah tan) hingga VI (tidak pernah terbakar, tidak ada perubahan penampilan saat tan).
Saya telah menambahkan dua kolom untuk jenis kelamin; biological_gender
menandakan jenis kelamin seseorang pada saat lahir, dan current_gender
menandakan jenis kelamin orang profil saat ini. Kolom kedua ini hanya berlaku untuk orang transgender, dan oleh karena itu saya membuatnya tidak dapat dibatalkan.
Informasi Penting Apa yang Dapat Disimpan di Sistem Ini? Bagaimana Cara Penyimpanannya?
Sekarang kita beralih ke Pengelolaan Data Kesehatan . Komposisi tubuh, kadar glukosa darah, dan dimensi tubuh disimpan dalam tabel terpisah. Namun orang dapat memasukkan lebih dari satu jenis informasi sekaligus, jadi kami menggunakan body_vitals_log
tabel untuk melacak informasi apa yang masuk ke profil dan kapan dimasukkan.
Semua statistik vital disimpan dalam tabel berikut:
body_composition
– Menyimpan detail tentang berbagai persentase komposisi tubuh seperti lemak, massa tanpa lemak, tulang, atau air. Ini juga memegang nilai BMI (indeks massa tubuh) untuk individu.blood_cholesterol
– Menyimpan detail kolesterol seperti LDL, HDL, trigliserida, dan total.body_dimension
– Merekam dimensi berbagai area tubuh, seperti ukuran pinggang atau dada.body_weight
– Menyimpan nilai untuk berat badan.body_height
– Memegang nilai untuk tinggi badan seseorang.blood_pressure
– Menyimpan angka tekanan darah (sistolik dan diastolik).blood_glucose
– Mencatat kadar glukosa darah.
Sebagian besar kolom dalam tabel di atas cukup jelas, dengan beberapa pengecualian. Anda akan melihat beberapa kolom tambahan seperti measurement_method_id
, compare_to_normal_id
, measurement_unit_id
dan measurement_context
di hampir setiap tabel ini. Saya akan menjelaskan kolom ini nanti.
body_vitals_log
melacak informasi apa yang dicatat pada waktu tertentu untuk profil. Kolom dalam tabel ini adalah:
user_profile_id
– Menunjukkan profil mana yang mencatat informasi.dt_created
– Menyimpan tanggal dan waktu saat informasi dimasukkan.data_source_id
– Menandakan sumber data, seperti manual, perangkat elektronik, dll.- SayaD dari berbagai statistik vital – Saya telah membuat semua kolom ini tidak dapat dibatalkan, karena pengguna diizinkan untuk mencatat satu atau lebih item sekaligus. Tidak semua pengguna ingin melacak statistik kesehatan yang sama.
Bagaimana Kami Dapat Membuat Sistem Bekerja di Berbagai Wilayah?
Beberapa informasi diukur dalam unit yang berbeda di berbagai area. Misalnya, berat badan diukur dalam kilogram di Asia, tetapi diukur dalam pound di Amerika Utara. Jadi agar ini bisa diterapkan di database kami, kami membutuhkan cara untuk melacak unit pengukuran.
id
– Berfungsi sebagai kunci utama tabel ini, dan merupakan kunci yang dirujuk oleh tabel lain.measurement_parameter
– Menandakan jenis informasi penting (seperti berat badan, tinggi badan, tekanan darah, dll.) yang diukur oleh unit.unit_name
– Menyimpan nama unit. Pikirkan kilogram dan pound untuk berat badan, mg/dL dan mmol/L untuk glukosa darah.
Bagaimana Orang Tahu Jika Angka Mereka Bagus?
Sistem kami tidak banyak membantu kecuali memperingatkan orang-orang akan risiko atau kerentanan kesehatan. Kami mengaktifkan fungsi ini dengan menambahkan comparison_to_normal_id
kolom di semua tabel data informasi penting.
Ketika ada informasi penting baru yang masuk ke sistem, catatan akan dibandingkan dengan nilai tolok ukur yang sesuai dan kolom ini akan disetel sesuai dengan itu.
Nilai yang mungkin untuk tabel ini adalah:
Saya | Teks |
---|---|
1 | Tidak tahu |
2 | Jauh Lebih Rendah |
3 | Turunkan |
4 | Biasa |
5 | Lebih tinggi |
6 | Jauh Lebih Tinggi |
Dapatkah Pengguna Merekam Saat Pengukuran Dilakukan?
Misalnya, pengguna mungkin perlu menyatakan kapan glukosa darah mereka diukur – yaitu sebelum atau sesudah makan. Atau mereka mungkin menimbang diri mereka sendiri dan mencatat hasilnya sebelum dan sesudah berolahraga. Untuk memfasilitasi ini, saya telah menambahkan kolom, measurement_context
, dalam tabel informasi penting yang mungkin memerlukan informasi kontekstual. Beberapa kemungkinan nilai untuk kolom ini ditunjukkan di bawah ini:
Sebelum Sarapan |
Setelah Sarapan |
Sebelum Makan Siang |
Setelah Makan Siang |
Sebelum Makan Malam |
Setelah Makan Malam |
Sebelum Latihan |
Setelah Latihan |
Puasa |
Tidak Puasa |
Setelah Makan |
Sebelum Makan |
Sebelum Tidur |
Bagaimana Jika Seseorang Penderita Diabetes dan Perlu Memantau Kadar Glukosa Darahnya?
Sistem yang saya usulkan akan memiliki dasbor yang dapat menampilkan statistik vital dalam format grafis. Pengguna diizinkan untuk memilih apa yang ingin mereka lihat di dasbor profil mereka, dan setiap profil memiliki dasbornya sendiri. Pemegang akun diizinkan untuk melihat semua dasbor profil yang telah mereka buat.
Saya telah menambahkan satu kolom CHAR(1) untuk setiap parameter yang dapat ditampilkan di dasbor. Secara default, semua kolom akan diisi dengan 'N' (tampilan dimatikan) saat profil baru dibuat. Pengguna nantinya dapat mengubah konfigurasi dasbor mereka dari opsi di antarmuka pengguna aplikasi.
Bagaimana Sistem Ini Membantu Orang Tetap Fit?
Dengan kata lain, kita berbicara tentang Penyimpanan Data Kebugaran . Selain informasi kesehatan, sistem ini juga memungkinkan penggunanya untuk mencatat informasi tentang kebugaran dan rutinitas olahraga mereka.
activity_log
tabel adalah tabel utama di area subjek ini. Ini menangkap detail tentang setiap jenis profil aktivitas yang dilakukan orang.
Setiap aktivitas dapat diukur dengan satu atau lebih dari tiga parameter berikut:
- Waktu mulai dan berakhir – Aktivitas seperti bermain olahraga atau permainan, berdiri dalam antrean, dll. diukur dari segi waktu mulai dan berakhir. Ini dilakukan melalui
start_time
danend_time
kolom diactivity_log
. - Jarak yang ditempuh – Aktivitas seperti lari atau bersepeda diukur dari jarak yang ditempuh. Ini disimpan di
distance_covered
kolom. - Jumlah langkah – Aktivitas seperti berjalan diukur dalam hitungan langkah, dan nilainya disimpan di
steps_count
kolom.
Anda pasti bertanya-tanya mengapa calories_burnt
kolom ada di activity_log
meja. Seperti namanya, kolom ini menyimpan nilai kalori yang dibakar oleh profil orang tersebut saat melakukan aktivitas tertentu. Saya akan menjelaskan bagaimana kita dapat menghitung nilai-nilai ini di bagian selanjutnya.
Saya telah membuat satu tabel bernama activity
untuk menyimpan daftar semua kemungkinan kegiatan. Kolom dalam tabel ini adalah:
id
– Menetapkan nomor ID unik untuk setiap aktivitas.activity_name
– Menyimpan nama aktivitas.activity_multiplier
– Kolom ini berperan penting dalam menghitung jumlah kalori yang dibakar oleh orang yang melakukan aktivitas.
Bagaimana Anda Menghitung Kalori yang Terbakar untuk Setiap Aktivitas?
Untuk memahami cara menghitung pembakaran kalori, pertama-tama kita harus memahami BMR seseorang, atau tingkat metabolisme basal. Ini memberitahu kita berapa banyak kalori yang dibakar tubuh saat istirahat. BMR setiap orang tergantung pada jenis kelamin, usia, berat badan, dan tinggi badan mereka. Dari perspektif pemodelan data, BMR adalah dimensi yang berubah secara perlahan, dan karena itu terus berubah seiring waktu. Kami akan menyimpan nilai BMR individual terbaru di user_bmr
meja.
Ada berbagai metode yang digunakan untuk menghitung nilai BMR:
Metode# 1:Metode Harris-Benedict
BMR Pria:66 + (6,23 X berat dalam pon) + (12,7 X tinggi dalam inci) – (6,8 X usia)
BMR Wanita:655 + (4,35 X berat dalam pon) + (4,7 X tinggi dalam inci) – (4,7 X usia)
Metode# 2:Metode Katch-McArdle
BMR (Pria + Wanita):370 + (21,6 * Massa Tubuh dalam kilogram)
Lean Mass =berat dalam kilogram – (berat dalam kilogram * lemak tubuh %)
Kita dapat menggunakan BMR seseorang dan pengganda aktivitas yang disebutkan di atas untuk mengetahui berapa banyak kalori yang dibakar seseorang saat melakukan aktivitas tertentu. Rumusnya adalah:
Kalori yang terbakar =pengganda aktivitas * BMR
Catatan:Kedua metode perhitungan BMR di atas menggunakan nilai pengali yang sama untuk aktivitas. Untuk informasi lebih lanjut, lihat artikel ini.
Dapatkah Kami Menyimpan Nilai BMR Historis Profil?
Ya. Kami dapat mengarsipkan nilai BMR di user_bmr_archive
meja.
Kita mulai dengan menambahkan satu kolom, id_version
, ke user_bmr
meja. Kami terus meningkatkan nilai ini sebesar 1 setiap kali nilai BMR seseorang profil diperbarui.
user_bmr_archive
tabel hampir merupakan replika dari user_bmr
meja. Satu-satunya perbedaan adalah ia memiliki dt_expired
kolom bukannya dt_created
dan dt_modified
kolom. dt_expired
kolom menyimpan tanggal saat versi menjadi tidak valid, yaitu saat nilai BMR diperbarui di user_bmr
.
Bagaimana Jika Pengguna Ingin Mencatat Imunisasi, Riwayat Kesehatan Keluarga, dan Alergi Mereka?
Sistem ini memanfaatkan tabel berikut untuk memberi pengguna kemampuan untuk menyimpan informasi kesehatan tambahan.
immunization
tabel menyimpan rincian tentang imunisasi yang diterima oleh orang-orang profil. Setelah contoh, Anda akan melihat deskripsi singkat tentang kolom yang ada di tabel ini:
Contoh – John Soo menerima dosis kedua dari tiga dosis vaksin Hepatitis B. Itu diberikan oleh Dr. David Moore pada 28 November 2016. Vaksinasi diberikan dengan suntikan di tangan kiri. Ini diproduksi oleh Cipla (perusahaan farmasi).
id
– Kunci utama tabel iniuser_profile_id
– Mengacu padauser_profile_ID
dari John Soovaccination_name
– “Hepatitis B”dt_received
– “28 Nov 2016”number_in_sequence
– “02”body_area_id
– ID tangan kiri, dirujuk daribody_area
tabelprovider_name
– “Dr. David Moore”how_administered
– “Disuntikkan” (nilai lain yang mungkin termasuk semprotan hidung, tablet, tetes, sirup )manufacturer
– “Cipla”
allergy
tabel menyimpan rincian tentang alergi yang dialami oleh orang-orang profil. Di bawah ini adalah daftar kolom, dengan nilai relevan yang diberikan untuk masing-masing kolom sesuai contoh:
Contoh – Alison D'Souza mengalami batuk saat makan yogurt. Dia pertama kali mengalami reaksi ini ketika dia berusia 8 tahun. Dia berkonsultasi dengan Dr. Bill Smith, yang meresepkan beberapa obat dan menyarankan tindakan pencegahan tertentu. Alergi ini masih berlanjut, tetapi intensitasnya lebih rendah sekarang.
id
– Kunci utama tabeluser_profile_id
– Rmengacu padauser_profile_id
dari Alison D'Souzaallergy_type_id
– Mengacu pada ID untuk jenis alergi 'Makanan' diallergy_type
meja. (allergy_type
tabel mendefinisikan berbagai jenis alergi seperti makanan, obat-obatan, lingkungan, hewan, tumbuhan, dll.)allergy_reaction_id
– Mengacu pada ID reaksi alergi 'Batuk' diallergy_reaction
tabel.first_observed
– Tanggal saat reaksi ini pertama kali diamati, yaitu saat Alison berusia 8 tahun.consulting_doctor_name
– “Dr. Bill Smith”treatment_brief
– Deskripsi singkat tentang obat-obatan yang diresepkan dan tindakan pencegahan yang direkomendasikan.does_treatment_cure_allergy
– “Sembuh sebagian. Menurunkan intensitas reaksi.”
family_history
tabel menyimpan detail tentang riwayat keluarga medis pengguna. Sekali lagi, kami telah membuat daftar kolom dan jenis informasi yang akan disimpan di dalamnya berdasarkan contoh berikut.
Contoh – Ibu Diana, Lisa, mengidap penyakit Parkinson (gangguan neurologis). Dia telah menjalani perawatan, tetapi tidak mendapatkan perbaikan yang nyata.
id
– kunci utama tabeluser_profile_id
–user_profile_ID
Diana dariuser_profile
tabelRelationship_id
– ID 'ibu' darirelationship
tabelRelative_name
– “Lisa”Date_of_birth
– Tanggal lahir LisaDate_of_death
– NULL (Lisa masih hidup, dan berjuang keras melawan penyakitnya.)Condition_brief
– Deskripsi singkat tentang bagaimana, kapan, dan di mana kondisi dimulai, konsultasi, bantuan apa pun, dll.Current_status
– 'Saat Ini' (Status lain yang mungkin adalah 'Sela-sekali' dan 'Masa Lalu'.)How_it_ended
– NULL
Apa yang Akan Anda Tambahkan ke Model Data Ini?
Sistem ini memungkinkan orang mengetahui berapa banyak kalori yang mereka bakar saat melakukan berbagai aktivitas, tetapi tidak melacak berapa banyak kalori yang mereka konsumsi, atau seberapa bergizi pilihan makanan mereka. Selain itu, sistem memungkinkan mereka untuk merekam data kebugaran mereka setiap hari, tetapi tidak memungkinkan mereka menetapkan tujuan, merumuskan rencana, dan melacak kemajuan mereka sehingga mereka tetap termotivasi.
Haruskah kita mempertimbangkan untuk membangun fitur-fitur ini ke dalamnya? Perubahan apa yang perlu dilakukan untuk menambahkan fitur ini?
Beri tahu kami ide Anda!