java php laravel linux mysql sql bootstrap html css query java php laravel linux mysql sql bootstrap html css query

Wednesday, April 1, 2026

DBMS DDL

📚 Basis Data · RMIK Semester 4

Pengenalan DBMS & DDL:
MySQL / MariaDB untuk Pemula

CREATE DATABASE, CREATE TABLE, ALTER TABLE & DROP — semua yang kamu butuhkan untuk mulai ngulik basis data dari nol.

4
Perintah DDL Utama
10+
Contoh SQL Siap Pakai
~12 min
Waktu Baca
DBMS MySQL MariaDB DDL Basis Data RMIK

Bayangin kamu lagi kerja di rumah sakit, dan tugasmu adalah mengelola data rekam medis ribuan pasien. Tanpa sistem yang terorganisir, data bisa berantakan seperti tumpukan kertas di meja IGD yang nggak pernah beres. Nah, di sinilah DBMS (Database Management System) jadi penyelamatnya.

Sebagai mahasiswa D3 RMIK (Rekam Medis dan Informasi Kesehatan), kamu pasti akan bersentuhan langsung dengan sistem informasi rumah sakit yang mengandalkan database. Artikel ini hadir sebagai panduan pertamamu untuk memahami DBMS dan perintah-perintah DDL di MySQL/MariaDB — dari nol, santai, tapi tetap serius biar bisa dipraktikkan langsung.

💡
Fakta Menarik

Menurut DB-Engines Ranking (2024), MySQL masih menjadi DBMS paling populer di dunia selama lebih dari satu dekade, digunakan oleh platform raksasa teknologi dan berbagai sistem SIMRS (Sistem Informasi Manajemen Rumah Sakit) di Indonesia.
Sumber: db-engines.com/en/ranking, 2024

🗄️ Apa Itu DBMS? Kenalan Dulu Sebelum Ngoding

DBMS (Database Management System) adalah perangkat lunak yang dirancang untuk membuat, mengelola, mengakses, dan mengontrol data dalam sebuah basis data. Secara sederhana, DBMS itu seperti manajer gudang yang tahu persis di mana setiap barang disimpan, siapa yang boleh mengambilnya, dan bagaimana cara merapikannya.

Menurut Silberschatz, Korth, dan Sudarshan dalam Database System Concepts (7th ed., McGraw-Hill, 2019), DBMS adalah kumpulan data yang saling berhubungan beserta sekumpulan program untuk mengakses data tersebut. Tujuan utamanya adalah menyediakan cara yang nyaman dan efisien untuk menyimpan serta mengambil informasi dari database.

🔧 Fungsi Utama DBMS
1
Data Definition — Mendefinisikan struktur data (nama tabel, kolom, tipe data) melalui DDL.
2
Data Manipulation — Operasi CRUD (Create, Read, Update, Delete) melalui DML.
3
Data Security & Integrity — Melindungi data dari akses tidak sah & menjaga konsistensinya.
4
Concurrency Control — Mengatur akses data secara bersamaan oleh banyak pengguna.
5
Backup & Recovery — Memulihkan data ketika terjadi kegagalan sistem.

Ada banyak pilihan DBMS di luar sana. Berikut perbandingan singkat beberapa yang paling populer:

DBMS Jenis Keunggulan Cocok Untuk
MySQL Relasional Open source, cepat, ekosistem besar Web app, SIMRS
MariaDB Relasional Fork MySQL, lebih cepat, community-driven Web app, enterprise
PostgreSQL Relasional Fitur lengkap, ACID compliant Analitik, kompleks
SQLite Relasional Ringan, serverless, mudah Belajar, mobile app

🐬 MySQL vs MariaDB: Mana yang Lebih Oke?

MySQL pertama kali dirilis oleh MySQL AB pada tahun 1995 dan saat ini dikembangkan oleh Oracle Corporation. Sedangkan MariaDB adalah fork (cabang) dari MySQL yang dibuat oleh Michael Widenius — sang co-founder MySQL sendiri — pada 2009, setelah Oracle mengakuisisi Sun Microsystems. Nama MariaDB diambil dari nama putri Widenius, Maria (sementara MySQL dari nama putri lainnya, My).

Kabar baiknya: sintaks SQL-nya hampir identik. Jadi kalau kamu belajar DDL di MySQL, bisa langsung dipake di MariaDB. Di banyak hosting lokal Indonesia dan SIMRS, MariaDB justru lebih umum dipakai karena performanya.

🛠️
Tips Praktikum

Untuk praktikum di kampus atau laptop, kamu bisa install XAMPP (sudah include MySQL/MariaDB + phpMyAdmin) atau HeidiSQL sebagai GUI client. Kalau mau yang lebih ringan, pakai DBeaver Community Edition — gratis dan mendukung semua DBMS populer.

📐 DDL (Data Definition Language): Arsitek-nya Database

Kalau kamu kenal istilah "SQL sublanguage", maka DDL (Data Definition Language) adalah bagian dari SQL yang bertugas mendefinisikan struktur atau skema database. Ibaratnya, DDL itu adalah arsitek yang menggambar denah gedung sebelum pembangunan dimulai — bukan yang mengisi furniturnya.

Menurut Ramakrishnan & Gehrke dalam Database Management Systems (3rd ed., McGraw-Hill, 2003), DDL digunakan untuk membuat, mengubah, dan menghapus objek-objek database seperti tabel, indeks, dan view. Perintah DDL utama yang wajib kamu kuasai adalah: CREATE DATABASE, CREATE TABLE, ALTER TABLE, dan DROP.

📊 Kategori Sub-Bahasa SQL
DDL — CREATE, ALTER, DROP, TRUNCATE
DML — SELECT, INSERT, UPDATE, DELETE
DCL — GRANT, REVOKE
TCL — COMMIT, ROLLBACK, SAVEPOINT
* Di artikel ini kita fokus pada DDL. DML akan dibahas di sesi berikutnya. 😉

1️⃣ CREATE DATABASE — Bikin "Folder" Datamu

Sebelum bisa bikin tabel apapun, kamu harus punya database dulu. Anggap saja database itu seperti folder besar di Google Drive-mu khusus untuk data rekam medis. Perintahnya sederhana banget:

SQL — MySQL / MariaDB
-- Membuat database baru untuk sistem rekam medis
CREATE DATABASE rekam_medis_rs;

-- Atau gunakan IF NOT EXISTS agar tidak error jika sudah ada
CREATE DATABASE IF NOT EXISTS rekam_medis_rs
  CHARACTER SET utf8mb4
  COLLATE utf8mb4_unicode_ci;

-- Berpindah ke database tersebut
USE rekam_medis_rs;
💬 Kenapa utf8mb4? Karena utf8mb4 mendukung semua karakter Unicode termasuk aksara khusus dan karakter extended. utf8 biasa di MySQL hanya mendukung 3 byte, jadi bisa bermasalah dengan karakter tertentu.

2️⃣ CREATE TABLE — Desain Struktur Datamu

Ini adalah perintah DDL yang paling sering kamu pakai. CREATE TABLE digunakan untuk membuat tabel baru beserta kolom-kolomnya, tipe data, dan constraint-nya. Analoginya seperti membuat formulir rekam medis — kamu tentukan dulu kolom apa saja yang perlu diisi.

SQL — Tabel Pasien Rekam Medis
CREATE TABLE pasien (
  no_rm         VARCHAR(10)   NOT NULL PRIMARY KEY,
  nama_lengkap  VARCHAR(100)  NOT NULL,
  jenis_kelamin ENUM('L','P')    NOT NULL,
  tanggal_lahir DATE          NOT NULL,
  alamat        TEXT,
  no_telepon    VARCHAR(15),
  created_at    DATETIME      DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Tabel kunjungan dengan FOREIGN KEY
CREATE TABLE kunjungan (
  id_kunjungan  INT           AUTO_INCREMENT PRIMARY KEY,
  no_rm         VARCHAR(10)   NOT NULL,
  tanggal       DATE          NOT NULL,
  diagnosis     VARCHAR(200),
  dokter        VARCHAR(100)  NOT NULL,
  FOREIGN KEY (no_rm) REFERENCES pasien(no_rm)
    ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

Tipe data yang sering dipakai dalam konteks rekam medis dan sistem informasi kesehatan:

Tipe Data Keterangan Contoh Penggunaan
INTBilangan bulatid_pasien, umur
VARCHAR(n)String panjang variabel max n karakternama, no_rm, telepon
DATETanggal (YYYY-MM-DD)tanggal_lahir, tgl_masuk
DATETIMETanggal + waktu lengkapcreated_at, updated_at
TEXTTeks panjang tak terbatascatatan, diagnosis, alamat
DECIMAL(m,d)Bilangan desimal dengan presisibiaya, berat_badan, suhu
ENUMNilai dari daftar pilihan tetapjenis_kelamin, goldar, status

3️⃣ ALTER TABLE — Edit Struktur Tabel yang Sudah Ada

Kadang kebutuhan berubah — misalnya kamu lupa tambahkan kolom email di tabel pasien, atau tiba-tiba perlu memperbesar ukuran kolom nama. Nah, ALTER TABLE adalah solusinya — tanpa perlu menghapus dan membuat ulang tabel, sehingga data kamu tetap aman.

SQL — ALTER TABLE Contoh Lengkap
-- 1. Menambah kolom baru
ALTER TABLE pasien
  ADD COLUMN email VARCHAR(100);

-- 2. Menambah kolom di posisi tertentu
ALTER TABLE pasien
  ADD COLUMN nik VARCHAR(16) AFTER no_rm;

-- 3. Mengubah tipe data kolom
ALTER TABLE pasien
  MODIFY COLUMN nama_lengkap VARCHAR(150) NOT NULL;

-- 4. Rename kolom (MySQL 8+ / MariaDB 10.5+)
ALTER TABLE pasien
  RENAME COLUMN no_telepon TO telepon;

-- 5. Menghapus kolom
ALTER TABLE pasien
  DROP COLUMN email;

-- 6. Menambah INDEX untuk performa query
ALTER TABLE pasien
  ADD INDEX idx_nama (nama_lengkap);
Insight Penting

Saat menggunakan ALTER TABLE pada tabel yang berisi jutaan baris data (seperti di SIMRS besar), operasi ini bisa memakan waktu lama dan bahkan mengunci tabel (table lock) sehingga operasi lain terhambat. Solusinya: gunakan pt-online-schema-change dari Percona Toolkit, atau fitur Online DDL di MySQL 8+/MariaDB 10.3+. Ini penting kamu tahu saat nanti kerja di fasilitas kesehatan!

4️⃣ DROP — Hapus dengan Penuh Kesadaran ⚠️

DROP adalah perintah DDL paling "berbahaya" karena sifatnya irreversible — tidak bisa di-undo! Kalau kamu DROP tabel, semua data di dalamnya ikut hilang. Makanya ada meme developer yang bilang: "Sebelum DROP, berdoa dulu..." 😅

⚠️ DANGER ZONE — Pastikan sudah backup!
-- Menghapus TABEL (data ikut hilang!)
DROP TABLE kunjungan;

-- Aman: cek dulu apakah tabel ada
DROP TABLE IF EXISTS kunjungan;

-- Menghapus DATABASE seluruhnya (semua tabel ikut hilang!)
DROP DATABASE rekam_medis_rs;
DROP DATABASE IF EXISTS rekam_medis_rs;

-- Alternatif: TRUNCATE (hapus semua data, tapi struktur tabel tetap)
TRUNCATE TABLE kunjungan;
-- Note: TRUNCATE lebih cepat dari DELETE, tapi tidak bisa di-rollback

Biar nggak bingung, ini perbedaan DROP, TRUNCATE, dan DELETE:

Perintah Hapus Data? Hapus Struktur? Bisa Rollback? Kategori
DROPYaYaTidakDDL
TRUNCATEYa (semua baris)TidakTidak*DDL
DELETEYa (bisa kondisional)TidakYaDML

🏥 Studi Kasus: Skema Database Rekam Medis Mini

Sekarang saatnya kita praktikkan semua yang sudah dipelajari dengan membuat skema mini database rekam medis. Anggap saja ini tugas pertamamu sebagai calon petugas RMIK yang melek IT!

📋 Spesifikasi Database: simrs_mini
Entitas yang perlu dibuat: pasien, dokter, poliklinik, kunjungan
Pasien
no_rm, nama, NIK, tgl_lahir, alamat, telepon
Dokter
id_dokter, nama, spesialisasi, SIP
Poliklinik
id_poli, nama_poli, lantai, telp
Kunjungan
id_kunjungan, no_rm, id_dokter, id_poli, tgl, diagnosa, icd10
SQL — Skema Lengkap SIMRS Mini
-- ==========================================
-- SIMRS MINI - Database Rekam Medis
-- Dibuat untuk praktikum Basis Data D3 RMIK
-- ==========================================

CREATE DATABASE IF NOT EXISTS simrs_mini
  CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

USE simrs_mini;

-- Tabel Poliklinik (dibuat duluan karena direferensikan)
CREATE TABLE poliklinik (
  id_poli    INT         AUTO_INCREMENT PRIMARY KEY,
  nama_poli  VARCHAR(80) NOT NULL UNIQUE,
  lantai     TINYINT     DEFAULT 1,
  telepon    VARCHAR(15)
);

-- Tabel Dokter
CREATE TABLE dokter (
  id_dokter     INT          AUTO_INCREMENT PRIMARY KEY,
  nama_dokter   VARCHAR(100) NOT NULL,
  spesialisasi  VARCHAR(80),
  no_sip        VARCHAR(30)  UNIQUE
);

-- Tabel Pasien
CREATE TABLE pasien (
  no_rm          VARCHAR(10)  PRIMARY KEY,
  nik            CHAR(16)     UNIQUE,
  nama_lengkap   VARCHAR(100) NOT NULL,
  jenis_kelamin  ENUM('L','P')  NOT NULL,
  tanggal_lahir  DATE         NOT NULL,
  golongan_darah ENUM('A','B','AB','O','Tidak Diketahui')
                              DEFAULT 'Tidak Diketahui',
  alamat         TEXT,
  telepon        VARCHAR(15),
  created_at     TIMESTAMP    DEFAULT CURRENT_TIMESTAMP
);

-- Tabel Kunjungan (tabel transaksi utama)
CREATE TABLE kunjungan (
  id_kunjungan   BIGINT      AUTO_INCREMENT PRIMARY KEY,
  no_rm          VARCHAR(10) NOT NULL,
  id_dokter      INT         NOT NULL,
  id_poli        INT         NOT NULL,
  tgl_kunjungan  DATE        NOT NULL,
  kode_icd10     VARCHAR(10),
  diagnosis      TEXT,
  FOREIGN KEY (no_rm)    REFERENCES pasien(no_rm)     ON UPDATE CASCADE,
  FOREIGN KEY (id_dokter) REFERENCES dokter(id_dokter)  ON UPDATE CASCADE,
  FOREIGN KEY (id_poli)   REFERENCES poliklinik(id_poli) ON UPDATE CASCADE
);

-- Tambah kolom yang terlupa
ALTER TABLE kunjungan
  ADD COLUMN berat_badan DECIMAL(5,2) AFTER tgl_kunjungan;

-- Hapus tabel sementara jika tidak diperlukan
DROP TABLE IF EXISTS tabel_sementara;
🚨
Peringatan Penting

Perintah DDL (CREATE, ALTER, DROP) di MySQL/MariaDB bersifat auto-commit — artinya langsung tersimpan tanpa bisa di-rollback meskipun kamu belum COMMIT. Berbeda dengan DML. Jadi selalu backup dulu sebelum menjalankan DDL di database produksi. Di dunia SIMRS, satu kesalahan DROP TABLE bisa mengakibatkan kehilangan data rekam medis ribuan pasien.

Best Practice DDL
  • Selalu gunakan IF NOT EXISTS / IF EXISTS untuk menghindari error tak terduga
  • Tentukan charset=utf8mb4 dari awal agar tidak repot migrasi nanti
  • Gunakan FOREIGN KEY untuk menjaga integritas data relasional
  • Dokumentasikan skema database dengan komentar SQL (-- komentar)
  • Selalu backup sebelum ALTER/DROP di database produksi!

📚 Referensi

  1. Silberschatz, A., Korth, H. F., & Sudarshan, S. (2019). Database System Concepts (7th ed.). McGraw-Hill Education.
  2. Ramakrishnan, R., & Gehrke, J. (2003). Database Management Systems (3rd ed.). McGraw-Hill.
  3. Schwartz, B., Zaitsev, P., & Tkachenko, V. (2012). High Performance MySQL (3rd ed.). O'Reilly Media.
  4. Oracle Corporation. (2024). MySQL 8.0 Reference Manual. Tersedia di: https://dev.mysql.com/doc/refman/8.0/en/
  5. MariaDB Foundation. (2024). MariaDB Knowledge Base — DDL Statements. Tersedia di: https://mariadb.com/kb/en/data-definition/
  6. DB-Engines. (2024). DB-Engines Ranking. Tersedia di: https://db-engines.com/en/ranking
  7. Kementerian Kesehatan RI. (2022). Peraturan Menteri Kesehatan Nomor 24 Tahun 2022 tentang Rekam Medis. Jakarta: Kemenkes RI.
🏁 Kesimpulan

Kamu Sudah Selangkah Lebih Maju!

Di artikel ini, kamu sudah belajar tentang DBMS sebagai fondasi sistem informasi, mengenal MySQL dan MariaDB sebagai DBMS pilihan, serta memahami empat perintah DDL utama yang wajib dikuasai oleh praktisi RMIK:

CREATE DATABASE CREATE TABLE ALTER TABLE DROP

Dengan pemahaman DDL ini, kamu sudah bisa membuat skema database dari nol — termasuk untuk konteks RMIK yang langsung relevan di dunia kerjamu nanti. Next step: pelajari DML (INSERT, SELECT, UPDATE, DELETE) untuk mulai mengisi dan mengolah data di tabel yang sudah kamu buat!

💬

Gimana, Udah Nyoba Sendiri?

Coba langsung praktikkan contoh-contoh SQL di atas di XAMPP atau HeidiSQL kamu. Kalau ada yang bingung, error-nya apa, atau ada pertanyaan seputar materi basis data lainnya — tulis di kolom komentar! Aku akan bantu jawab. 🙌

👍 Like artikel ini
🔗 Share ke teman sekelas
🔔 Subscribe blog ini

Next artikel: DML — INSERT, SELECT, UPDATE, DELETE dengan Studi Kasus SIMRS. Stay tuned!

#DBMS #MySQL #MariaDB #DDL #BasisData #RMIK #SistemInformasi #SQL

perancangan struktur basis data

BASIS DATA SIMRS D3 RMIK Semester 4

Perancangan Struktur Basis Data:
Desain & Arsitektur Skema Fisik SIMRS

Tabel, kolom, Primary Key, Foreign Key, constraint, indeks — semua yang kamu butuhkan untuk merancang basis data Sistem Informasi Manajemen Rumah Sakit yang solid dan profesional.

6+
Entitas Utama SIMRS
3NF
Target Normalisasi
4 Tipe
Constraint Penting
Relasi Antar Tabel

Bayangkan kamu baru masuk kerja di rumah sakit besar sebagai staf rekam medis. Di hari pertama, sistem komputernya down. Data pasien bertebaran di tiga aplikasi berbeda, nomor rekam medis duplikat, dan dokter teriak karena riwayat alergi pasien tidak muncul saat dibutuhkan. Kaos total. Nah, semua bencana itu bisa dicegah — asal perancangan struktur basis data-nya benar sejak awal.

Di artikel ini, kita bahas tuntas bagaimana perancangan struktur basis data — mulai dari desain dan arsitektur, tabel, kolom, Primary Key (PK), Foreign Key (FK), constraint, indeks, sampai skema fisik basis data SIMRS yang nyata. Ini bukan teori kosong; ini bekal langsung yang bisa kamu terapkan di tugas kuliah, praktikum, bahkan nanti di dunia kerja.

⚡ Fakta Menarik

Menurut Permenkes No. 82 Tahun 2013, setiap rumah sakit wajib memiliki Sistem Informasi Manajemen Rumah Sakit (SIMRS). Artinya, basis data yang kamu rancang hari ini adalah komponen legal yang wajib ada di setiap fasilitas kesehatan Indonesia — bukan sekadar tugas kuliah!

🏗️ Desain & Arsitektur Basis Data: Fondasi Sebelum Membangun

Sebelum kamu buru-buru bikin tabel di MySQL, ada tahapan penting yang sering dilewatkan: perancangan arsitektur. Analoginya seperti membangun rumah — kamu tidak langsung pasang batu bata tanpa gambar denah, kan?

Menurut Connolly & Begg (2015), desain basis data terdiri dari tiga level arsitektur yang saling berkaitan, yang dikenal sebagai ANSI/SPARC Architecture:

1
Level Konseptual (Conceptual Schema)
Gambaran besar keseluruhan data — entitas apa saja yang ada (Pasien, Dokter, Obat, dll.) dan bagaimana hubungannya. Biasanya diwujudkan dalam Entity Relationship Diagram (ERD).
2
Level Logikal (Logical Schema)
Transformasi ERD menjadi tabel-tabel relasional. Di sini kita tentukan tabel, kolom, tipe data, dan relasi antar tabel — namun belum terikat ke DBMS tertentu.
3
Level Fisik (Physical Schema)
Implementasi nyata di DBMS (MySQL, PostgreSQL, dll.) — termasuk DDL, indeks, partisi tabel, dan optimasi penyimpanan. Inilah yang kita tulis dalam SQL.
💡 Tips Praktikum

Saat mengerjakan tugas atau UAS, mulailah selalu dari ERD dulu. Dosen umumnya menilai ketepatan relasi antar entitas, bukan banyaknya tabel. Satu ERD yang logis lebih bernilai dari sepuluh tabel yang asal-asalan!

🔑 Tabel, Kolom, Primary Key & Foreign Key dalam SIMRS

Kalau basis data itu seperti sebuah perpustakaan, maka tabel adalah raknya, kolom adalah kategorisasi buku (judul, pengarang, ISBN), dan baris adalah satu buku konkret. Sederhana, tapi penting untuk dipahami sebelum masuk ke bagian yang lebih teknis.

Silberschatz, Korth, & Sudarshan (2020) dalam Database System Concepts mendefinisikan relasi (tabel) sebagai himpunan baris yang memiliki skema atribut (kolom) yang sama. Dalam konteks SIMRS, berikut contoh nyata struktur tabel dasarnya:

Nama Kolom Tipe Data Constraint Keterangan
id_pasien VARCHAR(10) PRIMARY KEY Nomor Rekam Medis unik
nama_pasien VARCHAR(100) NOT NULL Nama lengkap pasien
tanggal_lahir DATE NOT NULL Format YYYY-MM-DD
jenis_kelamin ENUM('L','P') CHECK Hanya 'L' atau 'P'
id_poli INT FOREIGN KEY Referensi ke tabel Poli

Primary Key (PK) adalah kolom (atau kombinasi kolom) yang secara unik mengidentifikasi setiap baris dalam tabel. Tidak boleh NULL, tidak boleh duplikat. Untuk SIMRS, Nomor Rekam Medis (NRM) adalah PK tabel Pasien — ini bukan sekadar aturan teknis, tapi juga standar rekam medis Indonesia berdasarkan Permenkes No. 269 Tahun 2008.

Foreign Key (FK) adalah kolom yang mereferensikan PK di tabel lain, menciptakan relasi antar tabel. Contoh: id_dokter di tabel Kunjungan merujuk ke id_dokter di tabel Dokter. Tanpa FK, datamu bisa "yatim" — ada kunjungan ke dokter yang tidak terdaftar, alias orphan record.

📐 Formula / Aturan Emas PK
PK yang baik = Unik + Stabil + Minimal

Unik = tidak ada dua baris dengan nilai sama. Stabil = nilainya jarang/tidak berubah (hindari pakai nama atau alamat sebagai PK!). Minimal = gunakan kolom sesedikit mungkin, lebih baik satu kolom integer/varchar singkat.

🛡️ Constraint & Indeks: Penjaga Integritas dan Kecepatan Data

Constraint ibarat "peraturan tata tertib" di asrama — dibuat agar tidak ada yang berbuat sembarangan. Sementara indeks ibarat "daftar isi" di buku tebal — tanpanya, kamu harus baca dari halaman pertama hanya untuk nemuin satu nama.

Ramez Elmasri & Shamkant Navathe (2016) dalam Fundamentals of Database Systems mengklasifikasikan constraint menjadi beberapa jenis utama:

🔒
NOT NULL
Kolom wajib diisi, tidak boleh kosong. Contoh: nama_pasien NOT NULL
🎯
UNIQUE
Nilai di kolom tidak boleh duplikat. Contoh: no_nik UNIQUE — satu NIK, satu pasien.
CHECK
Validasi logika domain. Contoh: CHECK (umur >= 0) — umur tidak boleh negatif.
🔗
FOREIGN KEY
Menjaga integritas referensial. Data di tabel anak harus ada padanannya di tabel induk.

Indeks: Turbo untuk Query

Indeks mempercepat pencarian data secara dramatis — terutama di tabel besar seperti data kunjungan pasien yang bisa mencapai jutaan baris. Tanpa indeks, DBMS harus scan seluruh tabel (full table scan). Dengan indeks, ia langsung melompat ke lokasi yang tepat.

SQL DDL — Tabel Pasien & Indeks
-- Tabel Pasien
CREATE TABLE pasien (
  id_pasien   VARCHAR(10)  NOT NULL,
  nama_pasien VARCHAR(100) NOT NULL,
  tanggal_lahir DATE       NOT NULL,
  jenis_kelamin ENUM('L','P') NOT NULL,
  no_nik      VARCHAR(16)  UNIQUE,
  id_poli     INT,
  PRIMARY KEY (id_pasien),
  FOREIGN KEY (id_poli) REFERENCES poli(id_poli)
    ON DELETE SET NULL
    ON UPDATE CASCADE
);

-- Indeks pada nama untuk pencarian cepat
CREATE INDEX idx_nama_pasien
  ON pasien (nama_pasien);

-- Indeks komposit untuk laporan per poli & tanggal
CREATE INDEX idx_poli_tgl
  ON kunjungan (id_poli, tanggal_kunjungan);
🔍 Insight Penting

Jangan asal tambah indeks! Indeks mempercepat SELECT, tapi memperlambat INSERT, UPDATE, DELETE karena indeks harus diperbarui setiap ada perubahan data. Prinsipnya: buat indeks hanya pada kolom yang sering dipakai di klausa WHERE, JOIN, atau ORDER BY.

🏥 Skema Fisik Basis Data SIMRS: Gambaran Nyata

Sekarang kita masuk ke bagian paling seru — bagaimana perancangan struktur basis data itu terlihat dalam konteks nyata sebuah SIMRS. Mengacu pada standar minimal SIMRS menurut Permenkes No. 82 Tahun 2013, setidaknya ada enam entitas/modul utama yang harus diakomodir dalam skema fisiknya:

📊 Entitas Utama dalam Skema SIMRS
👤
Pasien
id_pasien (PK), nama, NIK, tanggal_lahir, golongan_darah, alamat
🩺
Dokter
id_dokter (PK), nama, no_str, spesialisasi, id_poli (FK)
🏥
Kunjungan / Registrasi
id_kunjungan (PK), id_pasien (FK), id_dokter (FK), tanggal, keluhan, status
💊
Obat & Farmasi
id_obat (PK), nama_obat, satuan, stok, harga_beli, harga_jual
💰
Tagihan & Pembayaran
id_tagihan (PK), id_kunjungan (FK), total, status_bayar, metode_bayar
🛏️
Rawat Inap
id_rawat_inap (PK), id_pasien (FK), id_kamar (FK), tgl_masuk, tgl_keluar, diagnosa
🎓 Insight Akademis

Dalam merancang SIMRS, pastikan skema fisikmu mempertimbangkan normalisasi hingga 3NF (Third Normal Form). Menurut Date (2004) dalam An Introduction to Database Systems, 3NF menghilangkan redundansi yang dapat menyebabkan anomali pembaruan (update anomaly), penyisipan (insertion anomaly), dan penghapusan (deletion anomaly) data — tiga bencana terbesar dalam desain basis data yang buruk.

SQL DDL — Tabel Kunjungan (contoh relasi lengkap)
CREATE TABLE kunjungan (
  id_kunjungan    INT          AUTO_INCREMENT PRIMARY KEY,
  id_pasien       VARCHAR(10)  NOT NULL,
  id_dokter       INT          NOT NULL,
  tanggal_kunjungan DATETIME   NOT NULL,
  keluhan         TEXT,
  diagnosa        VARCHAR(200),
  status          ENUM('menunggu','proses','selesai') DEFAULT 'menunggu',
  FOREIGN KEY (id_pasien)
    REFERENCES pasien(id_pasien)
    ON DELETE RESTRICT ON UPDATE CASCADE,
  FOREIGN KEY (id_dokter)
    REFERENCES dokter(id_dokter)
    ON DELETE RESTRICT ON UPDATE CASCADE
);

-- Indeks untuk laporan harian
CREATE INDEX idx_tgl_kunjungan
  ON kunjungan (tanggal_kunjungan);
CREATE INDEX idx_pasien_kunjungan
  ON kunjungan (id_pasien, tanggal_kunjungan);

✅ Checklist Perancangan Basis Data SIMRS yang Benar

Sebelum kamu submit tugas atau deploy sistem, pastikan semua poin berikut sudah terpenuhi. Ini adalah quality gate yang dipakai oleh DBA (Database Administrator) profesional:

Setiap tabel memiliki Primary Key yang unik dan tidak NULL
Semua Foreign Key terdefinisi dengan aksi ON DELETE dan ON UPDATE yang tepat
Kolom wajib sudah ditandai NOT NULL, kolom opsional boleh NULL dengan DEFAULT yang masuk akal
Tipe data kolom proporsional — gunakan INT bukan BIGINT jika datanya kecil; VARCHAR(100) bukan TEXT jika panjang sudah pasti
Skema sudah di-normalisasi minimal 3NF — tidak ada redundansi data antar tabel
Indeks dipasang pada kolom yang sering digunakan untuk pencarian (WHERE) dan JOIN
Nama tabel dan kolom menggunakan konvensi yang konsisten (snake_case, bahasa Indonesia atau Inggris, pilih salah satu)
⚠️ Kesalahan Umum Mahasiswa

Tiga kesalahan terbesar yang paling sering ditemukan di tugas mahasiswa RMIK: (1) menyimpan nama dokter langsung di tabel kunjungan — harusnya pakai FK ke tabel dokter; (2) memakai VARCHAR untuk semua kolom angka — stok_obat harus INT, bukan VARCHAR; dan (3) tidak ada constraint sama sekali — akibatnya stok bisa minus, usia bisa 999 tahun, dan data chaos total.

📚 Referensi

  1. Connolly, T., & Begg, C. (2015). Database Systems: A Practical Approach to Design, Implementation, and Management (6th ed.). Pearson.
  2. Silberschatz, A., Korth, H. F., & Sudarshan, S. (2020). Database System Concepts (7th ed.). McGraw-Hill.
  3. Elmasri, R., & Navathe, S. B. (2016). Fundamentals of Database Systems (7th ed.). Pearson.
  4. Date, C. J. (2004). An Introduction to Database Systems (8th ed.). Addison-Wesley.
  5. Kementerian Kesehatan RI. (2013). Peraturan Menteri Kesehatan Nomor 82 Tahun 2013 tentang Sistem Informasi Manajemen Rumah Sakit. Kemenkes RI.
  6. Kementerian Kesehatan RI. (2008). Peraturan Menteri Kesehatan Nomor 269 Tahun 2008 tentang Rekam Medis. Kemenkes RI.
  7. Ramez, E., & Navathe, S. (2017). Sistem Basis Data (terjemahan). Indeks.

🎯 Kesimpulan

Perancangan struktur basis data bukan sekadar urusan teknis — ini adalah fondasi keandalan seluruh SIMRS. Dari desain ERD di level konseptual, transformasi ke skema logikal, hingga implementasi fisik dengan DDL, constraint, dan indeks: setiap langkah memiliki tujuan yang jelas.

Yang perlu kamu ingat: PK untuk identitas unik, FK untuk integritas relasi, constraint untuk validasi bisnis, dan indeks untuk performa. Terapkan 3NF, patuhi standar Permenkes, dan desainmu sudah selevel dengan sistem rumah sakit sungguhan.

💬

Diskusi Yuk! 🙌

Ada yang masih bingung soal FK vs PK? Atau mau nanya kenapa normalisasi 3NF itu penting? Drop pertanyaanmu di kolom komentar! Kita diskusi bareng. Kalau artikel ini bermanfaat, jangan lupa share ke teman seprodi — lumayan jadi referensi belajar bareng sebelum UAS 😄

📌 Bookmark Artikel Ini 📤 Share ke Teman 🔔 Subscribe Blog Ini
#BasisData #SIMRS #RMIK #PrimaryKey #ForeignKey #ERD #SQL #Normalisasi3NF #RekamMedis #KuliahRMIK

saifiahmada.com adalah blog belajar programming Indonesia, membahas lengkap materi bahasa pemrograman: code HTML, CSS, Bootstrap, Desain, PHP, MySQL, coding Java, Query, SQL, dan dunia linux