アクセントカラー

病院管理システムのデータベース設計

コアエンティティとリレーションシップ

すべてのHMSデータベースは患者を中心として構成されます。患者テーブルには人口統計情報、連絡先、医療記録への参照が格納されます。各患者には複数の予約が存在し、それぞれが特定の医師(staffテーブルからロールフィルタで選択)に紐付けられます。予約テーブルは中央のジャンクションとして機能し、請求、処方、検査依頼、診療記録を接続します。適切に設計されたスキーマは、予約検索や請求照合などの日常業務のクエリ性能を維持しながら、データを最低3NFに正規化します。

患者管理テーブル

患者テーブルには、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のタイムスタンプを含めるべきです。

予約とスケジューリングのスキーマ

予約テーブルは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)が格納されます。システムは既存の予約とスケジュールをクロスリファレンスして利用可能な時間枠を生成し、二重予約を防ぎます。

請求と保険

請求テーブルはすべての財務取引を追跡します:bill_id(PK)、appointment_id(FK)、patient_id(FK)、bill_date、total_amount、discount、tax、paid_amount、balance、payment_status。保険請求テーブルにはprovider_name、policy_number、coverage_percentage、claim_status、claim_amountなどの保険証券詳細が格納されます。患者自己負担分と保険適用の複雑な請求シナリオに対応するため、スキーマはpayment_transactionsテーブルを通じた分割払いをサポートしています。

薬局と在庫管理

薬局在庫テーブルでは医薬品を管理します:item_id(PK)、medicine_name、generic_name、category、manufacturer、batch_number、expiry_date、quantity_in_stock、unit_price、reorder_level。処方テーブルは医師と医薬品を接続します:prescription_id(PK)、appointment_id(FK)、medicine_id(FK)、dosage、frequency、duration、instructions。処方が調剤されると在庫数が自動的にデクリメントされ、在庫がしきい値を下回ると発注アラートが発生します。

検査と診断

検査依頼テーブルには予約時に依頼された検査が記録されます: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。検査結果テーブルには実際の値が格納されます:result_id(PK)、lab_order_id(FK)、parameter_name、parameter_value、normal_range、interpretation。画像診断については、放射線画像テーブルにファイル参照を格納します。

スタッフ管理

スタッフテーブルは病院の全従業員を統合します: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。部門テーブルには病院の各ユニット(循環器科、整形外科、救急、放射線科など)が一覧表示されます。スタッフシフトテーブルでは実際のシフトを割り当てます: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や類似の規制への準拠のため、各INSERT、UPDATE、DELETE操作をuser_id、タイムスタンプ、旧値/新値で記録する監査ログテーブルを追加してください。データ量の増加に伴いクエリ性能を維持するため、billingやlab_resultsなどの大きなテーブルを月別または年別にパーティショニングしてください。