Kesehatan
Sistem Rumah Sakit
Pasien, dokter, rekam medis, dan jadwal praktik
Sistem informasi rumah sakit mencakup manajemen pasien, dokter, poli, rekam medis, resep obat, dan jadwal. Skema ini menekankan integritas data medis, audit trail, dan query analitik untuk kebutuhan pelaporan klinis.
Audit Trail
Self-join
Rekursif
View
Stored Procedure
Partisi Tabel
1
ERD Diagram
Entity Relationship Diagram — notasi Chen (atribut oval)
Entitas = persegi panjang · Atribut = oval · Relasi = belah ketupat · Garis ganda = atribut kunci
2
Struktur Tabel
6 tabel dengan kolom, tipe data, dan constraint
pasien
7 kolom
| Kolom | Tipe Data | Constraint | Keterangan |
|---|---|---|---|
| id_pasien | INT | PK | Primary key |
| no_rm | VARCHAR(20) | UQ | Nomor Rekam Medis |
| nama | VARCHAR(100) | Nama lengkap pasien | |
| tgl_lahir | DATE | Tanggal lahir | |
| jenis_kelamin | ENUM(L,P) | Jenis kelamin | |
| alamat | TEXT | Alamat tinggal | |
| gol_darah | ENUM(A,B,AB,O) | Golongan darah |
dokter
5 kolom
| Kolom | Tipe Data | Constraint | Keterangan |
|---|---|---|---|
| id_dokter | INT | PK | Primary key |
| nama | VARCHAR(100) | Nama dokter | |
| spesialisasi | VARCHAR(80) | Bidang spesialisasi | |
| id_poli | INT | FK | → poli.id_poli |
| no_str | VARCHAR(30) | UQ | Nomor STR dokter |
poli
3 kolom
| Kolom | Tipe Data | Constraint | Keterangan |
|---|---|---|---|
| id_poli | INT | PK | Primary key |
| nama_poli | VARCHAR(80) | Nama poliklinik | |
| lantai | TINYINT | Lokasi lantai gedung |
kunjungan
7 kolom
| Kolom | Tipe Data | Constraint | Keterangan |
|---|---|---|---|
| id_kunjungan | INT | PK | Primary key |
| id_pasien | INT | FK | → pasien |
| id_dokter | INT | FK | → dokter |
| tgl_kunjungan | DATETIME | Tanggal & waktu kunjungan | |
| keluhan | TEXT | Keluhan utama pasien | |
| diagnosis | TEXT | Diagnosis dokter | |
| biaya | DECIMAL(12,2) | Biaya konsultasi |
resep
5 kolom
| Kolom | Tipe Data | Constraint | Keterangan |
|---|---|---|---|
| id_resep | INT | PK | Primary key |
| id_kunjungan | INT | FK | → kunjungan |
| id_obat | INT | FK | → obat |
| dosis | VARCHAR(80) | Aturan dosis & waktu minum | |
| jumlah | INT | Jumlah obat diresepkan |
obat
6 kolom
| Kolom | Tipe Data | Constraint | Keterangan |
|---|---|---|---|
| id_obat | INT | PK | Primary key |
| nama_obat | VARCHAR(100) | Nama obat | |
| kategori | VARCHAR(60) | Antibiotik / Analgesik / dll | |
| satuan | VARCHAR(20) | tablet/ml/kapsul | |
| stok | INT | Stok gudang farmasi | |
| harga_satuan | DECIMAL(10,2) | Harga per satuan |
3
Contoh Query
4 query analitik siap pakai
1. Rekam medis lengkap seorang pasien
Riwayat kunjungan, dokter, diagnosis, dan biaya.
SELECT k.tgl_kunjungan,
d.nama AS dokter,
d.spesialisasi,
k.keluhan, k.diagnosis,
k.biaya
FROM kunjungan k
JOIN dokter d ON d.id_dokter = k.id_dokter
WHERE k.id_pasien = :id_pasien
ORDER BY k.tgl_kunjungan DESC;
2. Dokter dengan pasien terbanyak bulan ini
Statistik kunjungan per dokter pada bulan berjalan.
SELECT d.nama, d.spesialisasi,
p.nama_poli,
COUNT(k.id_kunjungan) AS total_pasien,
SUM(k.biaya) AS total_pendapatan
FROM dokter d
JOIN poli p ON p.id_poli = d.id_poli
JOIN kunjungan k ON k.id_dokter = d.id_dokter
WHERE MONTH(k.tgl_kunjungan) = MONTH(CURDATE())
AND YEAR(k.tgl_kunjungan) = YEAR(CURDATE())
GROUP BY d.id_dokter
ORDER BY total_pasien DESC;
3. Obat paling sering diresepkan
Analisis penggunaan obat untuk stok farmasi.
SELECT o.nama_obat, o.kategori, o.satuan,
COUNT(r.id_resep) AS jml_resep,
SUM(r.jumlah) AS total_digunakan
FROM obat o
JOIN resep r ON r.id_obat = o.id_obat
GROUP BY o.id_obat
ORDER BY total_digunakan DESC
LIMIT 10;
4. Biaya total perawatan per pasien
Hitung total biaya kunjungan + obat per pasien.
SELECT ps.no_rm, ps.nama,
COUNT(k.id_kunjungan) AS total_kunjungan,
SUM(k.biaya) AS biaya_konsultasi,
COALESCE(SUM(r.jumlah * o.harga_satuan), 0) AS biaya_obat,
SUM(k.biaya) +
COALESCE(SUM(r.jumlah * o.harga_satuan), 0) AS total_biaya
FROM pasien ps
JOIN kunjungan k ON k.id_pasien = ps.id_pasien
LEFT JOIN resep r ON r.id_kunjungan = k.id_kunjungan
LEFT JOIN obat o ON o.id_obat = r.id_obat
GROUP BY ps.id_pasien
ORDER BY total_biaya DESC;
Case Study Lainnya