Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

Model Data untuk Melacak Kepemilikan Anda yang Paling Berharga

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 , dan zip . Karena kolom ini opsional dalam proses pendaftaran, saya telah membuat kolom ini sebagai nullable.
  • contact_number dan email – 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 pada relationship 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 dan end_time kolom di activity_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).

  • idKunci utama tabel ini
  • user_profile_idMengacu pada user_profile_ID dari John Soo
  • vaccination_name – “Hepatitis B”
  • dt_received – “28 Nov 2016”
  • number_in_sequence – “02”
  • body_area_idID tangan kiri, dirujuk dari body_area tabel
  • provider_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 tabel
  • user_profile_id – Rmengacu pada user_profile_id dari Alison D'Souza
  • allergy_type_idMengacu pada ID untuk jenis alergi 'Makanan' di allergy_type meja. (allergy_type tabel mendefinisikan berbagai jenis alergi seperti makanan, obat-obatan, lingkungan, hewan, tumbuhan, dll.)
  • allergy_reaction_idMengacu pada ID reaksi alergi 'Batuk' di allergy_reaction tabel.
  • first_observedTanggal saat reaksi ini pertama kali diamati, yaitu saat Alison berusia 8 tahun.
  • consulting_doctor_name – “Dr. Bill Smith”
  • treatment_briefDeskripsi 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.

  • idkunci utama tabel
  • user_profile_iduser_profile_ID Diana dari user_profile tabel
  • Relationship_idID 'ibu' dari relationship tabel
  • Relative_name – “Lisa”
  • Date_of_birthTanggal lahir Lisa
  • Date_of_death – NULL (Lisa masih hidup, dan berjuang keras melawan penyakitnya.)
  • Condition_briefDeskripsi 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!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Migrasi Data

  2. Tingkatkan Performa UDF dengan NULL ON NULL INPUT

  3. SQL CREATE TABLE untuk Pemula

  4. Membuat Model Data untuk Carpooling

  5. Hal-hal menarik tentang BUKAN pemicu