الكيانات الأساسية والعلاقات
كل قاعدة بيانات HMS تتمحور حول المريض. يخزن جدول patients البيانات الديموغرافية ومعلومات الاتصال ومراجع التاريخ الطبي. يمكن لكل مريض أن يكون لديه مواعيد متعددة، كل منها مرتبط بطبيب معين (من جدول staff مع تصفية الدور). جدول appointments هو الوصلة المركزية — يتصل بالفواتير والوصفات وطلبات المختبر وسجلات الزيارة. المخطط المصمم جيداً يطبع البيانات إلى 3NF على الأقل لتجنب التكرار مع الحفاظ على أداء الاستعلام للعمليات اليومية مثل البحث عن المواعيد وتسوية الفواتير.
جداول إدارة المرضى
يشمل جدول patients حقولاً مثل patient_id (PK)، first_name، last_name، date_of_birth، gender، blood_group، phone، email، address، emergency_contact_name، emergency_contact_phone، و registration_date. يتتبع جدول patient_medical_history المنفصل التشخيصات السابقة والعمليات الجراحية والحساسية والأمراض المزمنة مع مفاتيح أجنبية تعود إلى patient_id. هذا الفصل يحافظ على سجل المريض الأساسي خفيفاً مع السماح بإدخالات تاريخية غير محدودة. للامتثال، يجب أن يتضمن كل سجل طابعَي created_at و updated_at الزمنيين.
مخطط المواعيد والجدولة
جدول appointments هو قلب HMS. تتضمن الحقول appointment_id (PK)، patient_id (FK)، doctor_id (FK)، appointment_date، appointment_time، status (scheduled/completed/cancelled/no-show)، reason_for_visit، و notes. يخزن جدول doctor_schedule نوافذ التوفر (doctor_id، day_of_week، start_time، end_time، slot_duration_minutes). النظام يولد الفترات الزمنية المتاحة عن طريق الربط بين الجدول والمواعيد الحالية لمنع الحجز المزدوج.
الفواتير والتأمين
يسجل جدول billing كل معاملة مالية: bill_id (PK)، appointment_id (FK)، patient_id (FK)، bill_date، total_amount، discount، tax، paid_amount، balance، و payment_status. يخزن جدول insurance_claims تفاصيل البوليصة بما في ذلك provider_name، policy_number، coverage_percentage، claim_status، و claim_amount. لسيناريوهات الفوترة المعقدة مثل التغطية التأمينية الجزئية مع مشاركة المريض في التكاليف، يدعم المخطط الدفعات المقسمة من خلال جدول payment_transactions الذي يسجل كل طريقة دفع ومساهمتها في الفاتورة.
الصيدلية والمخزون
يدير جدول pharmacy_inventory الأدوية: item_id (PK)، medicine_name، generic_name، category، manufacturer، batch_number، expiry_date، quantity_in_stock، unit_price، و reorder_level. يربط جدول prescriptions الأطباء بالأدوية: prescription_id (PK)، appointment_id (FK)، medicine_id (FK)، dosage، frequency، duration، و instructions. عندما يتم صرف الوصفة الطبية، تنخفض كمية المخزون تلقائياً ويتم تشغيل تنبيه إعادة الطلب عندما ينخفض المخزون عن الحد الأدنى.
المختبر والتشخيص
يسجل جدول lab_orders الفحوصات المطلوبة أثناء المواعيد: lab_order_id (PK)، appointment_id (FK)، test_name، test_category (blood/urine/imaging)، ordered_by (doctor_id)، order_date، status (pending/collected/processing/completed)، و result_date. يخزن جدول lab_results القيم الفعلية: result_id (PK)، lab_order_id (FK)، parameter_name، parameter_value، normal_range، و interpretation. للتصوير الطبي، يخزن جدول radiology_images مراجع الملفات.
إدارة الموظفين
يوحد جدول staff جميع موظفي المستشفى: staff_id (PK)، first_name، last_name، role (doctor/nurse/admin/lab_technician/pharmacist/receptionist)، specialization، department_id (FK)، phone، email، hire_date، و shift_preference. يسرد جدول departments وحدات المستشفى (أمراض القلب، العظام، الطوارئ، الأشعة، إلخ). يحدد جدول staff_shifts المناوبات الفعلية: shift_id (PK)، staff_id (FK)، shift_date، start_time، end_time، و notes.
أفضل الممارسات لتصميم قاعدة بيانات HMS
استخدم المعرفات الفريدة العامة (UUID) أو المفاتيح الأساسية المركبة للأنظمة الموزعة. طبق الحذف الناعم (علامة is_active) بدلاً من الحذف القاسي لسجلات المرضى. أضف قيوداً على مستوى قاعدة البيانات للحقول الحرجة مثل تفرد البريد الإلكتروني للمريض والتحقق من وقت الموعد. أضف فهارس لأعمدة المفاتيح الأجنبية التي تظهر في عمليات JOIN — خاصة patient_id و doctor_id و appointment_id. للامتثال لقانون HIPAA أو اللوائح المماثلة، أضف جدول audit_log يسجل كل عملية INSERT و UPDATE و DELETE مع user_id والطابع الزمني والقيم القديمة/الجديدة. قسم الجداول الكبيرة مثل billing و lab_results حسب الشهر أو السنة للحفاظ على أداء الاستعلام مع نمو البيانات.
AIAZH