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

Monday, October 5, 2026

dbms ddl sql

๐Ÿ—„️
Seri Kuliah Basis Data · Artikel 13 dari 16
Kenalan dengan DBMS dan DDL: Membangun Rumah untuk Data Pasien
Pahami fungsi DBMS dan tiga perintah DDL (CREATE, ALTER, DROP) lewat studi kasus registrasi pasien dan kunjungan klinik.
#DBMS#DDL#CreateTable#SQLDasar
⏱️
±10 menit
Estimasi baca
๐ŸŽฏ
Pemula
Level
๐Ÿ“…
2026
Tahun

Bayangkan kamu bertugas di loket pendaftaran. Seorang pasien lansia datang kontrol, tapi berkas rekam medisnya terselip di antara ribuan map di rak belakang. Antrean memanjang, dan pasien mulai gelisah. Di era rekam medis elektronik, masalah ini diselesaikan oleh DBMS dan DDL SQL. DBMS adalah "pengelola gedung" yang menjaga data pasien tetap rapi, cepat dicari, dan aman. DDL adalah "denah bangunan" yang menentukan bentuk rumah tempat data itu tinggal. Sebagai calon perekam medis, kamu perlu paham cara rumah data dibangun, bukan hanya cara memakainya. Di artikel ini kamu belajar fungsi DBMS dan tiga perintah DDL: CREATE, ALTER, dan DROP, lengkap dengan contoh data pasien.

๐ŸŽ“ Artikel 13 dari 16 · Seri "Kuliah Basis Data"
Ini bahan kuliah teori untuk Sub-CPMK T4. Setelah membaca, kamu mampu: (1) menjelaskan fungsi DBMS, (2) membedakan DDL dari kelompok perintah SQL lain, dan (3) menulis perintah CREATE, ALTER, dan DROP untuk data kesehatan.

Memahami DBMS dan DDL SQL: Pengelola Gedung dan Denahnya

Mulai dari istilah dasarnya. Basis data adalah kumpulan data yang saling berhubungan dan tersusun rapi, misalnya data pasien, kunjungan, diagnosis, dan tenaga kesehatan. Adapun DBMS (Database Management System) adalah perangkat lunak yang memungkinkan kamu mendefinisikan, membangun, dan mengelola basis data tersebut (Elmasri & Navathe, 2016). Contohnya MySQL, MariaDB, PostgreSQL, Oracle, dan Microsoft SQL Server.

๐Ÿ“ DEFINISI KUNCI
DBMS = perangkat lunak pengelola basis data
DDL = perintah SQL untuk mendefinisikan struktur basis data
Struktur = database, tabel, kolom, tipe data, dan aturan (constraint)

Analoginya begini. Rumah sakit adalah gedung, DBMS adalah manajemen gedungnya, dan SQL adalah bahasa yang kamu pakai untuk memberi perintah kepada manajemen itu. Perintah SQL dibagi ke dalam beberapa kelompok berdasarkan tugasnya.

KelompokPerintahTugasContoh di data kesehatan
DDLCREATE, ALTER, DROPMengatur strukturMembuat tabel pasien
DMLINSERT, UPDATE, DELETE, SELECTMengelola isi dataMencatat pasien baru
DCLGRANT, REVOKEMengatur hak aksesDokter boleh melihat diagnosis
TCLCOMMIT, ROLLBACKMengatur transaksiMembatalkan entri yang salah
⚡ Insight Penting
Basis data dan DBMS itu dua hal berbeda. Basis data adalah isinya, DBMS adalah pengelolanya. Beberapa buku memasukkan SELECT ke kelompok DQL, jadi pengelompokan di tabel ini bisa berbeda antarsumber. Cek selalu buku acuan mata kuliahmu.

Fungsi DBMS: Lebih dari Sekadar Lemari Arsip Digital

Kalau DBMS hanya menyimpan data, kamu cukup memakai lembar kerja biasa. Nilai tambah DBMS ada pada tujuh fungsi berikut (Silberschatz, Korth, & Sudarshan, 2019):

๐Ÿ” ANALISIS: TUJUH FUNGSI DBMS DI RUMAH SAKIT
1. Definisi data. Kamu menentukan struktur tabel dan tipe data. Inilah tugas DDL.
2. Manipulasi data. Menambah, mengubah, menghapus, dan mencari data lewat DML.
3. Keamanan. Petugas pendaftaran hanya melihat data demografi, sedangkan dokter melihat diagnosis. Ini penting karena Permenkes No. 24 Tahun 2022 mengatur keamanan dan kerahasiaan data rekam medis, dan UU No. 27 Tahun 2022 melindungi data pribadi.
4. Integritas data. Aturan seperti primary key dan foreign key mencegah kunjungan tercatat untuk pasien yang tidak ada.
5. Kontrol konkurensi. Dua petugas bisa mengakses data bersamaan tanpa saling menimpa.
6. Backup dan pemulihan. Data bisa dikembalikan setelah listrik padam atau server rusak.
7. Kamus data (katalog). DBMS menyimpan metadata, yaitu data tentang data, seperti nama tabel dan tipe kolom. Kamu sudah mengenalnya di artikel sebelumnya.

Supaya terasa bedanya, bandingkan dua cara menyimpan data pasien ini:

๐Ÿ—‚️
Rak arsip kertas
Mencari berkas butuh menit. Satu pasien bisa punya dua map. Hanya satu orang yang bisa memegang berkas. Kalau ruangan banjir, data hilang.
๐Ÿ›ก️
Dengan DBMS
Pencarian hitungan detik. Duplikasi dicegah lewat kunci unik. Banyak petugas mengakses bersamaan. Ada backup untuk pemulihan.
๐Ÿ”ฅ Fakta Menarik
SQL lahir dari model relasional yang diusulkan Edgar F. Codd (1970). Bahasa ini dikembangkan di IBM pada 1970-an dengan nama awal SEQUEL, lalu menjadi standar internasional dan terus diperbarui hingga kini.

DDL SQL Bagian 1: CREATE untuk Membangun Struktur Data Pasien

CREATE adalah perintah DDL untuk membangun objek baru, seperti database dan tabel. Pikirkan ini sebagai fase konstruksi: tanah disiapkan, lalu denah ruangan digambar. Ikuti langkah berikut untuk membangun basis data klinik sederhana. Contoh memakai sintaks MySQL.

1
Rancang dulu di kertas.
Tentukan entitas dan atributnya. Di klinik kita ada tiga: tenaga kesehatan, pasien, dan kunjungan.
2
Buat databasenya.
Gunakan CREATE DATABASE lalu aktifkan dengan USE.
3
Buat tabel induk lebih dulu.
Tabel tenaga_kesehatan dan pasien dibuat sebelum kunjungan, karena kunjungan merujuk ke keduanya.
4
Buat tabel kunjungan.
Tambahkan foreign key agar setiap kunjungan terhubung ke pasien dan tenaga kesehatan yang sah.
5
Periksa hasilnya.
Jalankan SHOW TABLES; dan DESCRIBE pasien; untuk memastikan struktur sesuai rancangan.
๐Ÿงพ SQL · buat_database.sql
-- 1. Membuat database klinik
CREATE DATABASE IF NOT EXISTS klinik_sehat
  CHARACTER SET utf8mb4;
USE klinik_sehat;

-- 2. Tabel induk: tenaga kesehatan
CREATE TABLE tenaga_kesehatan (
  id_nakes    INT AUTO_INCREMENT PRIMARY KEY,
  nama_nakes  VARCHAR(100) NOT NULL,
  profesi     VARCHAR(50)  NOT NULL
);

-- 3. Tabel induk: pasien
CREATE TABLE pasien (
  no_rm            VARCHAR(10)  PRIMARY KEY,
  nik              CHAR(16)     UNIQUE,
  nama_pasien      VARCHAR(100) NOT NULL,
  tgl_lahir        DATE         NOT NULL,
  jenis_kelamin    CHAR(1)      NOT NULL,
  alamat           VARCHAR(200),
  tgl_registrasi   DATETIME     DEFAULT CURRENT_TIMESTAMP
);

-- 4. Tabel anak: kunjungan
CREATE TABLE kunjungan (
  id_kunjungan   INT AUTO_INCREMENT PRIMARY KEY,
  no_rm          VARCHAR(10)  NOT NULL,
  id_nakes       INT          NOT NULL,
  tgl_kunjungan  DATETIME     NOT NULL,
  keluhan        VARCHAR(255),
  kode_icd10     VARCHAR(10),
  FOREIGN KEY (no_rm)    REFERENCES pasien(no_rm),
  FOREIGN KEY (id_nakes) REFERENCES tenaga_kesehatan(id_nakes)
);

-- 5. Verifikasi
SHOW TABLES;
DESCRIBE pasien;

Perhatikan beberapa keputusan desain di atas. no_rm menjadi primary key karena nomor rekam medis harus unik untuk setiap pasien. NOT NULL memaksa kolom penting selalu terisi. Kolom kode_icd10 menyimpan kode diagnosis menurut klasifikasi penyakit internasional (WHO, ICD-10). Aturan seperti inilah yang menjaga mutu data sejak hari pertama.

๐Ÿ’ก Tips
Pakai nama huruf kecil dengan garis bawah (no_rm, tgl_lahir) dan hindari spasi. Tambahkan IF NOT EXISTS supaya skripmu tidak error saat dijalankan dua kali. Kebiasaan kecil ini membuat skripmu rapi dan aman diulang.

DDL SQL Bagian 2: ALTER dan DROP, Merenovasi atau Meruntuhkan

Rumah jarang selesai sekali jadi. Suatu hari manajemen meminta kolom golongan darah, atau kolom alamat terasa kurang panjang. Di sinilah ALTER bekerja: mengubah struktur tabel yang sudah ada tanpa membangun ulang dari nol. Sementara itu, DROP menghapus objek beserta seluruh isinya.

๐Ÿงพ SQL · alter_drop.sql
-- Menambah kolom golongan darah setelah jenis kelamin
ALTER TABLE pasien
  ADD COLUMN golongan_darah CHAR(3) AFTER jenis_kelamin;

-- Memperpanjang kolom alamat
ALTER TABLE pasien
  MODIFY COLUMN alamat VARCHAR(255);

-- Menambah lalu menghapus kolom percobaan
ALTER TABLE pasien ADD COLUMN no_telp VARCHAR(15);
ALTER TABLE pasien DROP COLUMN no_telp;

-- Menghapus tabel latihan (HATI-HATI!)
DROP TABLE IF EXISTS tabel_latihan;
⚖️ ANALISIS: CREATE vs ALTER vs DROP
PerintahAnalogiContoh kasusTingkat risiko
CREATEMembangun ruangan baruTabel kunjungan๐ŸŸข Rendah
ALTERMerenovasi ruanganMenambah kolom golongan darah๐ŸŸก Sedang
DROPMeruntuhkan ruanganMenghapus tabel pasien๐Ÿ”ด Tinggi
⚠️ Perhatian
Di MySQL, perintah DDL menyebabkan implicit commit, sehingga tidak bisa dibatalkan dengan ROLLBACK (Oracle, 2024). DROP TABLE pasien pada data sungguhan berarti riwayat pasien lenyap, padahal rekam medis wajib disimpan sesuai ketentuan Permenkes No. 24 Tahun 2022. Latih DROP hanya di database latihan, dan di lingkungan nyata batasi hak aksesnya.
✏️ Latihan Mini
Buat tabel tindakan_medis berisi id_tindakan (kunci utama), id_kunjungan (kunci asing ke kunjungan), nama_tindakan, dan tgl_tindakan. Lalu gunakan ALTER untuk menambah kolom keterangan. Cocokkan jawabanmu dengan pola di atas, lalu bawa ke sesi praktikum.

๐Ÿ Kesimpulan: DBMS dan DDL SQL sebagai Fondasi Data Kesehatan

Kamu sudah mengenal pasangan penting dalam pengelolaan data pasien: DBMS dan DDL SQL. Ringkasnya:

✅ DBMS mengelola basis data lewat tujuh fungsi, dari definisi data sampai pemulihan.
✅ DDL mengatur struktur: CREATE membangun, ALTER merenovasi, DROP meruntuhkan.
✅ Bangun tabel induk lebih dulu, dan perlakukan DROP dengan sangat hati-hati.

Di artikel berikutnya, kamu akan mengisi rumah ini dengan data lewat INSERT, UPDATE, DELETE, dan SELECT. Pernah salah menjalankan perintah saat praktikum? Ceritakan di kolom komentar, dan bagikan artikel ini ke temanmu yang masih bingung dengan DDL.

๐Ÿ“š Referensi
Codd, E. F. (1970). A relational model of data for large shared data banks. Communications of the ACM, 13(6), 377–387.
Elmasri, R., & Navathe, S. B. (2016). Fundamentals of Database Systems (7th ed.). Pearson.
Oracle Corporation. (2024). MySQL 8.0 Reference Manual: CREATE TABLE, ALTER TABLE, DROP TABLE, dan statement yang menyebabkan implicit commit. https://dev.mysql.com/doc/refman/8.0/en/
Peraturan Menteri Kesehatan Republik Indonesia Nomor 24 Tahun 2022 tentang Rekam Medis.
Silberschatz, A., Korth, H. F., & Sudarshan, S. (2019). Database System Concepts (7th ed.). McGraw-Hill.
Undang-Undang Republik Indonesia Nomor 27 Tahun 2022 tentang Pelindungan Data Pribadi.
World Health Organization. (2019). International Statistical Classification of Diseases and Related Health Problems, 10th Revision (ICD-10).
#BasisData#Database#RMIK#DBMS#DDL#CreateTable
๐Ÿ“Œ Topik: DBMS dan DDL SQL untuk Data Rekam Medis
ARTIKEL UTAMA
๐Ÿ“– Daftar Isi Kuliah Basis Data
Lihat seluruh 16 artikel dalam seri ini dan pilih materi yang ingin kamu pelajari berikutnya.
Buka Daftar Isi →

tipe data variabel metadata kesehatan

๐Ÿฉบ๐Ÿ—‚️๐Ÿ”‘
Kuliah Basis Data · Artikel 12 dari 16

Pilih Tipe Data yang Pas: Variabel dan Metadata Kesehatan

Satu kolom salah tipe bisa membuat umur pasien kacau dan laporan tidak bisa dipercaya. Yuk, belajar memilihnya dengan benar.

Tipe Data Variabel Metadata Rekam Medis
⏱️
9 menit
estimasi baca
๐ŸŽฏ
Pemula
level
๐Ÿ“…
2026
tahun

Bayangkan petugas registrasi mengetik tanggal lahir pasien sebagai teks bebas: 5/3/92. Itu 5 Maret atau 3 Mei? Dua minggu kemudian laporan umur pasien berantakan, dan kamu yang diminta menjelaskan. Kesalahan sekecil ini hampir selalu berawal dari satu keputusan: salah memilih tipe data.

Di artikel ini kamu akan belajar menentukan tipe data dan metadata kesehatan dengan tepat, mulai dari mengenali variabel sampai menyusun kamus data. Artikel ini adalah bagian dari seri Kuliah Basis Data (Artikel 12 dari 16) untuk mahasiswa D3 RMIK semester 3, jadi cocok kalau kamu sedang menyiapkan struktur tabel pasien dan kunjungan.

Apa Itu Tipe Data dan Metadata Kesehatan?

Bayangkan dapur di rumahmu. Kerupuk masuk toples, sirop masuk botol, beras masuk wadah kedap udara. Kalau sirop kamu tuang ke saringan, hasilnya bocor dan lengket. Database bekerja dengan logika yang sama: tipe data menentukan jenis nilai apa yang boleh masuk ke sebuah kolom, berapa ruang yang dipakai, dan operasi apa yang bisa dilakukan, seperti menjumlahkan, mengurutkan, atau membandingkan.

๐Ÿ“ Tiga istilah kunci

Variabel = karakteristik yang dicatat dari sebuah objek, misalnya umur, berat badan, atau diagnosis. Di tabel, variabel menjadi kolom (atribut).

Tipe data = aturan jenis nilai yang boleh disimpan pada sebuah kolom (angka bulat, desimal, teks, tanggal, dan sebagainya).

Metadata = "data tentang data": nama kolom, tipe, panjang, aturan, dan arti setiap kolom (Elmasri & Navathe, 2016).

Variabel → Karakteristik → Tipe Data → Metadata

Kenapa ini penting di RMIK? Permenkes No. 24 Tahun 2022 mengatur penyelenggaraan rekam medis, termasuk rekam medis elektronik. Data pasien harus akurat, mudah dicari, dan bisa dilaporkan. Tipe data yang tepat membuat database menolak input ngawur secara otomatis, sedangkan metadata yang rapi membuat petugas lain paham arti setiap kolom tanpa harus menebak.

๐Ÿ”ฅ Fakta Menarik: NIK Tidak Muat di INT

NIK terdiri dari 16 digit, sedangkan nilai terbesar tipe INT hanya 2.147.483.647 (10 digit). Nomor rekam medis seperti 000123 juga akan berubah menjadi 123 kalau disimpan sebagai angka, karena nol di depannya hilang. Dua-duanya adalah identitas, bukan angka untuk dihitung, jadi simpan sebagai teks.

Mengenali Variabel: Fondasi Tipe Data dan Metadata Kesehatan

Sebelum memilih tipe data, kenali dulu karakter variabelnya. Ada empat skala pengukuran yang sering muncul di data kesehatan:

Nominal: kategori tanpa urutan, misalnya jenis kelamin atau golongan darah.
Ordinal: kategori berurutan, misalnya derajat nyeri ringan–sedang–berat.
Interval: angka dengan jarak sama tetapi tanpa nol mutlak, misalnya suhu tubuh dalam °C.
Rasio: angka dengan nol mutlak, misalnya berat badan, tinggi badan, atau jumlah kunjungan.

Variabel angka juga dibedakan menjadi diskret (hasil menghitung, seperti jumlah kunjungan) dan kontinu (hasil mengukur, seperti tinggi badan). Tabel berikut memetakan variabel khas rekam medis ke tipe data SQL.

Variabel Contoh nilai Karakteristik Tipe data SQL
No. rekam medis000123Identitas, tidak dihitungCHAR(6)
NIK1234567890123456Identitas 16 digitCHAR(16)
Nama pasienSiti RahmawatiTeks, panjang bervariasiVARCHAR(100)
Tanggal lahir1992-03-05TanggalDATE
Jenis kelaminL / PNominal, 2 pilihanCHAR(1)
Berat badan (kg)62,50Rasio, desimalDECIMAL(5,2)
Suhu tubuh (°C)37,8Interval, 1 desimalDECIMAL(3,1)
Waktu kunjungan2026-10-05 08:15:00Tanggal dan jamDATETIME (MySQL) / TIMESTAMP (PostgreSQL)
Kode ICD-10J00Kode alfanumerikVARCHAR(10)
Keluhan utamaDemam 3 hari, batukTeks panjang bebasTEXT
Rawat inap?Ya / TidakDua kemungkinanBOOLEAN
๐Ÿ’ก Tips: Tiga Pertanyaan Penentu

Untuk setiap variabel, tanyakan: (1) Apakah nilainya akan dihitung? Kalau tidak, simpan sebagai teks. (2) Apakah panjangnya selalu sama? Kalau ya, pakai CHAR. (3) Apakah pilihannya terbatas? Kalau ya, pakai kode pendek atau tabel referensi.

Langkah Memilih Tipe Data dan Metadata Kesehatan untuk Tabel Pasien

Ikuti lima langkah ini setiap kali kamu merancang tabel baru. Kamu bisa langsung memakainya pada formulir pendaftaran atau resume medis di tempat praktikmu.

1
Daftar semua variabel dari formulir.
Ambil formulir pendaftaran pasien dan tulis setiap isian: nama, tanggal lahir, keluhan, dan seterusnya. Satu isian umumnya menjadi satu kolom.
2
Tentukan skala dan karakter tiap variabel.
Nominal, ordinal, interval, atau rasio? Diskret atau kontinu? Hasilnya menentukan keluarga tipe data: teks, angka, atau tanggal.
3
Pilih tipe paling sempit yang masih aman.
Pakai INT untuk hitungan biasa, bukan BIGINT. Pakai VARCHAR(100) untuk nama, bukan TEXT. Tipe yang pas menghemat ruang dan mempercepat pencarian.
4
Tetapkan panjang, presisi, dan aturan wajib isi.
Putuskan NOT NULL untuk data yang wajib ada (misalnya tanggal lahir) dan boleh kosong untuk yang opsional (misalnya golongan darah).
5
Catat semuanya di kamus data.
Hasil langkah 1–4 kamu tuliskan sebagai metadata, supaya orang lain paham tanpa bertanya. Bagian berikutnya membahasnya.

Berikut hasil penerapan langkah-langkah itu pada tabel pasien dan kunjungan. Perintah CREATE TABLE dibahas tuntas di Artikel 13, jadi untuk sekarang fokus saja pada tipe data di setiap baris.

SQL · klik 3x pada kode untuk menyalin ๐Ÿ“‹
-- Tabel pasien: identitas dasar
CREATE TABLE pasien (
  no_rm          CHAR(6)       NOT NULL,
  nik            CHAR(16)      NOT NULL,
  nama_pasien    VARCHAR(100)  NOT NULL,
  tgl_lahir      DATE          NOT NULL,
  jenis_kelamin  CHAR(1)       NOT NULL,  -- 'L' atau 'P'
  gol_darah      VARCHAR(3),              -- boleh kosong
  PRIMARY KEY (no_rm)
);

-- Tabel kunjungan: satu pasien, banyak kunjungan
CREATE TABLE kunjungan (
  id_kunjungan   INT           NOT NULL,
  no_rm          CHAR(6)       NOT NULL,
  tgl_kunjungan  DATETIME      NOT NULL,
  berat_badan    DECIMAL(5,2),
  suhu_tubuh     DECIMAL(3,1),
  keluhan        TEXT,
  kode_icd10     VARCHAR(10),
  rawat_inap     BOOLEAN       NOT NULL,
  PRIMARY KEY (id_kunjungan),
  FOREIGN KEY (no_rm) REFERENCES pasien (no_rm)
);

Perhatikan pola yang muncul: kolom no_rm di tabel kunjungan memakai tipe dan panjang yang sama persis dengan no_rm di tabel pasien. Ini disengaja. Kolom yang menjadi penghubung antartabel (foreign key) harus kompatibel dengan kolom yang dirujuknya, kalau tidak, database menolak relasinya atau menghasilkan pencocokan yang meleset. Tabel berikut menunjukkan apa yang terjadi kalau tipe dipilih sembarangan.

๐Ÿ” Analisis: Salah Pilih Tipe, Apa Akibatnya?
Kolom Pilihan keliru Akibatnya Pilihan tepat
tgl_lahirVARCHARFormat campur aduk; saat diurutkan, "10/2" muncul sebelum "9/1"DATE
nikINTNilai 16 digit tidak muatCHAR(16)
no_rmINTNol di depan hilang: 000123 menjadi 123CHAR(6)
berat_badanINT62,5 kg dibulatkan; perhitungan dosis berbasis berat badan bisa melesetDECIMAL(5,2)
⚠️ Perhatian: Jangan Simpan Umur

Umur berubah setiap tahun, jadi kolom umur akan basi tanpa disadari. Simpan tgl_lahir, lalu hitung umur saat dibutuhkan. Di MySQL, kamu bisa memakai:

SELECT nama_pasien, TIMESTAMPDIFF(YEAR, tgl_lahir, CURDATE()) AS umur FROM pasien;

Membangun Kamus Data: Metadata Kesehatan dalam Praktik

Kalau tipe data adalah label di wadah dapur, metadata adalah buku resep lengkapnya: isi wadah apa, boleh disimpan berapa lama, dan siapa yang mengisinya. Metadata umumnya dikelompokkan menjadi tiga jenis: struktural (nama kolom, tipe, panjang), deskriptif (arti dan contoh nilai), dan administratif (pemilik data, tanggal perubahan). Dokumen yang merangkumnya disebut kamus data.

Kolom Tipe Wajib? Deskripsi Contoh
no_rmCHAR(6)YaNomor rekam medis unik per pasien000123
tgl_lahirDATEYaTanggal lahir, format YYYY-MM-DD1992-03-05
suhu_tubuhDECIMAL(3,1)TidakSuhu tubuh saat pemeriksaan, satuan °C37.8
kode_icd10VARCHAR(10)TidakKode diagnosis menurut ICD-10 WHOJ00

Kamu tidak perlu menebak metadata strukturalnya. DBMS menyimpannya di katalog sistem, dan kamu bisa membacanya lewat information_schema, yang tersedia di MySQL maupun PostgreSQL:

SQL · membaca metadata tabel pasien ๐Ÿ“‹
SELECT column_name,
       data_type,
       character_maximum_length,
       is_nullable
FROM   information_schema.columns
WHERE  table_name = 'pasien';
⚡ Insight Penting: Kode, Bukan Kalimat

Kolom kode_icd10 menyimpan kode diagnosis (WHO, 2019), bukan teks diagnosis. Nama penyakitnya cukup ditaruh sekali di tabel referensi, lalu dirujuk lewat kode. Hasilnya ejaan seragam, laporan morbiditas mudah dihitung, dan inilah pintu masuk ke normalisasi yang sudah kamu pelajari di artikel sebelumnya.

๐Ÿ Kesimpulan

Memilih tipe data dan metadata kesehatan dengan benar adalah pekerjaan kecil yang dampaknya besar. Ringkasnya:

• Kenali skala dan karakter variabel dulu, baru pilih tipe data.
• Identitas seperti NIK dan nomor RM disimpan sebagai teks, karena tidak dihitung.
• Pilih tipe paling sempit yang aman, lalu tetapkan panjang dan aturan NOT NULL.
• Simpan tanggal lahir, bukan umur.
• Catat semuanya di kamus data supaya seluruh tim membaca data dengan arti yang sama.

Sekarang giliranmu: variabel apa di formulir tempat praktikmu yang paling rawan salah tipe? Tulis di kolom komentar, dan bagikan artikel ini ke teman sekelasmu yang masih menyimpan tanggal sebagai teks.

๐Ÿ’ฌ Tulis Komentar ๐Ÿ“ค Bagikan Artikel
๐Ÿ“š Referensi

Elmasri, R., & Navathe, S. B. (2016). Fundamentals of Database Systems (7th ed.). Pearson.

Silberschatz, A., Korth, H. F., & Sudarshan, S. (2019). Database System Concepts (7th ed.). McGraw-Hill.

Kementerian Kesehatan Republik Indonesia. (2022). Peraturan Menteri Kesehatan Nomor 24 Tahun 2022 tentang Rekam Medis.

World Health Organization. (2019). International Statistical Classification of Diseases and Related Health Problems, 10th Revision (ICD-10). WHO.

MySQL. MySQL Reference Manual: Data Types. dev.mysql.com/doc.

PostgreSQL Global Development Group. PostgreSQL Documentation: Data Types. postgresql.org/docs.

#BasisData #Database #RMIK #TipeData #Metadata #VariabelKesehatan
Tipe Data dan Metadata Kesehatan Variabel dan Kamus Data RMIK
๐Ÿ“–
Daftar Isi Kuliah Basis Data

Artikel ini adalah bagian dari seri Kuliah Basis Data (Artikel 12 dari 16). Lihat peta lengkap seluruh materinya di artikel utama.

Buka Daftar Isi Kuliah Basis Data

normalisasi 3nf primary foreign key

๐Ÿ—‚️๐Ÿ”‘

Kuliah Basis Data, Artikel 11 dari 16

Sentuhan Akhir 3NF: Tabel Rapi dengan Primary Key dan Foreign Key

Rapikan tabel kunjungan pasien sampai tidak ada data ganda yang bikin laporan rekam medis berantakan.

Normalisasi 3NF Primary Key Foreign Key RMIK
8 menit
Estimasi baca
Menengah
Level
2026
Tahun

Bayangkan kamu bertugas di unit rekam medis. Dokter kita, dr. Sari, mengganti nama belakangnya setelah menikah. Namanya tercatat di 500 baris tabel kunjungan. Kamu mengubahnya satu per satu, tapi satu baris terlewat. Sekarang satu dokter punya dua nama di laporan. Itu bukan salahmu; tabelnya yang belum rapi. Obatnya adalah normalisasi 3NF.

Di artikel ini kamu menerapkan normalisasi 3NF pada data kunjungan pasien, lalu menentukan primary key dan foreign key. Artikel ini bagian dari seri Kuliah Basis Data (Artikel 11 dari 16), lanjutan dari materi 1NF dan 2NF.

Apa Itu Normalisasi 3NF dan Kenapa Dependensi Transitif Berbahaya?

Bentuk normal ketiga (3NF) adalah tahap lanjutan setelah 2NF. Pada 2NF, kamu sudah menghapus ketergantungan sebagian pada kunci. Pada 3NF, kamu menghapus dependensi transitif, yaitu atribut biasa yang ternyata ditentukan oleh atribut biasa lain, bukan oleh kunci (Elmasri & Navathe, 2016).

Analogi gampangnya begini. Di KTP-mu tercantum kode kelurahan, lalu dari kode itu kamu bisa tahu nama kelurahan. Kalau setiap data warga ikut menyimpan nama kelurahan lengkap, namanya pasti ditulis ribuan kali. Begitu nama kelurahan berubah, ribuan data harus diperbaiki.

๐Ÿ“

Definisi Inti

Tabel memenuhi 3NF jika sudah 2NF dan tidak ada atribut non-kunci yang bergantung pada atribut non-kunci lain.

A → B → C   (A kunci, B dan C bukan kunci) = dependensi transitif, harus dipisah

Ambil contoh tabel kunjungan hasil 2NF dari artikel sebelumnya. Perhatikan nama dokter, nama poli, dan nama diagnosis yang diulang-ulang:

id_kunjunganno_rmkode_dokternama_dokterkode_polinama_polikode_icd10nama_diagnosis
K001RM0001D01dr. Sari, Sp.PDP01Penyakit DalamI10Hipertensi esensial
K002RM0002D01dr. Sari, Sp.PDP01Penyakit DalamE11.9Diabetes melitus tipe 2
K003RM0003D01dr. Sari, Sp.PDP01Penyakit DalamI10Hipertensi esensial
๐Ÿ’ก Tips
Cara cepat mendeteksi dependensi transitif: tanya pada setiap kolom non-kunci, "Kalau kolom ini berubah, kolom lain ikut berubah tidak?" Kalau iya, kolom itu kandidat tabel baru.

๐Ÿ” Analisis: Apa yang Salah dari Tabel Ini?

Tabel di atas punya tiga rantai dependensi transitif:

id_kunjungan → kode_dokter → nama_dokter
id_kunjungan → kode_poli   → nama_poli
id_kunjungan → kode_icd10  → nama_diagnosis

Anomali ubah: ganti nama dr. Sari berarti mengubah ratusan baris. Anomali hapus: menghapus satu-satunya kunjungan poli baru ikut menghapus informasi poli itu. Anomali sisip: kamu tidak bisa mendaftarkan dokter baru sebelum ia punya kunjungan.

5 Langkah Normalisasi 3NF pada Data Kunjungan Pasien

Ikuti urutan ini setiap kali kamu mengerjakan soal normalisasi 3NF di kelas atau ujian:

1
Pastikan tabel sudah 2NF. Semua atribut atomik, dan tidak ada ketergantungan sebagian pada kunci. Kalau belum, balik dulu ke artikel 1NF dan 2NF.
2
Tulis semua ketergantungan fungsional. Contoh: kode_dokter → nama_dokter, spesialisasi. Tulis dengan tanda panah supaya rantai transitifnya terlihat.
3
Cari dependensi transitif. Cari pola kunci → atribut biasa → atribut biasa lain. Atribut tengah (kode_dokter, kode_poli, kode_icd10) adalah calon primary key tabel baru.
4
Pisahkan menjadi tabel baru. Pindahkan atribut yang bergantung ke tabel baru, lalu jadikan penentunya sebagai primary key. Hasilnya: tabel dokter, poli, dan diagnosis.
5
Tinggalkan penghubungnya. Kode penentu tetap ada di tabel asal sebagai foreign key. Tanpa langkah ini, kamu kehilangan hubungan antardata.
⚡ Insight Penting
Normalisasi bukan soal memecah tabel sebanyak mungkin. Tujuannya satu: setiap fakta disimpan di satu tempat saja. Kent (1983) merangkumnya dengan kalimat terkenal: setiap atribut harus bergantung pada kunci, seluruh kunci, dan tidak ada yang lain selain kunci.

Primary Key dan Foreign Key: Hasil Akhir Normalisasi 3NF

Primary key adalah "nomor KTP" sebuah baris: unik dan tidak boleh kosong. Foreign key adalah "tautan" yang menunjuk ke primary key tabel lain, mirip nomor rekam medis yang kamu tulis di formulir lab supaya hasilnya sampai ke pasien yang benar. Berikut peta hasil normalisasi 3NF-nya:

  pasien (PK no_rm)         dokter (PK kode_dokter)
        │                          │
        └────────┐      ┌──────────┘
                 ▼      ▼
         kunjungan (PK id_kunjungan)
          FK: no_rm, kode_dokter,
              kode_poli, kode_icd10
                 ▲      ▲
        ┌────────┘      └──────────┐
        │                          │
  poli (PK kode_poli)    diagnosis (PK kode_icd10)
๐Ÿ’ป skema_3nf_rekam_medis.sql
CREATE TABLE pasien (
  no_rm        VARCHAR(10)  PRIMARY KEY,
  nama_pasien  VARCHAR(100) NOT NULL,
  tgl_lahir    DATE         NOT NULL
);

CREATE TABLE dokter (
  kode_dokter  VARCHAR(8)   PRIMARY KEY,
  nama_dokter  VARCHAR(100) NOT NULL,
  spesialisasi VARCHAR(50)
);

CREATE TABLE poli (
  kode_poli    CHAR(3)      PRIMARY KEY,
  nama_poli    VARCHAR(50)  NOT NULL
);

CREATE TABLE diagnosis (
  kode_icd10     VARCHAR(7)   PRIMARY KEY,
  nama_diagnosis VARCHAR(150) NOT NULL
);

CREATE TABLE kunjungan (
  id_kunjungan  VARCHAR(10) PRIMARY KEY,
  no_rm         VARCHAR(10) NOT NULL,
  tgl_kunjungan DATE        NOT NULL,
  kode_dokter   VARCHAR(8)  NOT NULL,
  kode_poli     CHAR(3)     NOT NULL,
  kode_icd10    VARCHAR(7),
  FOREIGN KEY (no_rm)       REFERENCES pasien (no_rm),
  FOREIGN KEY (kode_dokter) REFERENCES dokter (kode_dokter),
  FOREIGN KEY (kode_poli)   REFERENCES poli (kode_poli),
  FOREIGN KEY (kode_icd10)  REFERENCES diagnosis (kode_icd10)
);

Kamu bisa menggabungkan kembali data dengan JOIN kapan pun butuh laporan lengkap:

๐Ÿ’ป laporan_kunjungan.sql
SELECT k.id_kunjungan, p.nama_pasien, d.nama_dokter,
       po.nama_poli, dg.nama_diagnosis
FROM kunjungan k
JOIN pasien    p  ON k.no_rm       = p.no_rm
JOIN dokter    d  ON k.kode_dokter = d.kode_dokter
JOIN poli      po ON k.kode_poli   = po.kode_poli
LEFT JOIN diagnosis dg ON k.kode_icd10 = dg.kode_icd10;
๐Ÿ”ฅ Fakta Menarik
Kode ICD-10 seperti I10 dan E11.9 yang kamu pakai di tabel diagnosis berasal dari klasifikasi penyakit WHO. Karena sudah baku, kode ini cocok jadi primary key alami. Kamu tidak perlu membuat nomor urut sendiri.
TabelPrimary KeyForeign Key
pasienno_rm-
dokterkode_dokter-
polikode_poli-
diagnosiskode_icd10-
kunjunganid_kunjunganno_rm, kode_dokter, kode_poli, kode_icd10
⚠️ Perhatian
Contoh di atas menyederhanakan satu diagnosis per kunjungan. Di fasilitas kesehatan nyata, satu kunjungan bisa punya banyak diagnosis dan tindakan, sehingga butuh tabel penghubung tersendiri. Soal itu kita bahas lebih lanjut di seri berikutnya. Ingat juga, rekam medis tergolong data pribadi kesehatan; atur akses tabel pasien dengan ketat (Permenkes No. 24 Tahun 2022).

Cek Ulang Hasil Normalisasi 3NF: Dua Pertanyaan Sakti

Setelah memecah tabel, uji hasilnya dengan dua pertanyaan. Pertama: kalau nama dr. Sari berubah, berapa baris yang harus kuubah? Jawaban yang benar: satu baris di tabel dokter. Kedua: apakah ada atribut non-kunci yang menentukan atribut non-kunci lain? Jawaban yang benar: tidak ada. Kalau keduanya terpenuhi, normalisasi 3NF-mu sudah beres.

DBMS seperti MySQL dan PostgreSQL membantu menjaga hubungan ini lewat foreign key constraint. Kamu tidak bisa menyimpan kunjungan dengan kode_dokter yang tidak terdaftar (lihat dokumentasi resmi MySQL dan PostgreSQL pada daftar referensi).

Bentuk NormalMasalah yang DihapusContoh di Kasus Ini
1NFNilai majemuk dan kelompok berulangSatu sel berisi beberapa diagnosis
2NFKetergantungan sebagian pada kunciData pasien tercampur di tabel kunjungan
3NFDependensi transitifNama dokter, poli, dan diagnosis ikut terulang
๐ŸŽฏ

Kesimpulan

Normalisasi 3NF menghapus dependensi transitif dengan memisahkan atribut yang bergantung pada atribut non-kunci ke tabel sendiri. Penentunya menjadi primary key di tabel baru dan tetap hadir sebagai foreign key di tabel asal.

Dengan normalisasi 3NF, data dokter, poli, dan diagnosis cukup disimpan sekali. Laporan rekam medis jadi konsisten, dan perubahan data tidak lagi menyiksa.

Sudah coba? Ceritakan kasus tabel yang paling bikin kamu pusing di kolom komentar, lalu bagikan artikel ini ke temanmu.

๐Ÿ’ฌ Tulis Komentar ๐Ÿ“ค Bagikan Artikel

๐Ÿ“š Daftar Referensi

  • Codd, E. F. (1970). A relational model of data for large shared data banks. Communications of the ACM, 13(6), 377–387.
  • Elmasri, R., & Navathe, S. B. (2016). Fundamentals of Database Systems (7th ed.). Pearson.
  • Kent, W. (1983). A simple guide to five normal forms in relational database theory. Communications of the ACM, 26(2), 120–125.
  • Silberschatz, A., Korth, H. F., & Sudarshan, S. (2019). Database System Concepts (7th ed.). McGraw-Hill.
  • Peraturan Menteri Kesehatan Republik Indonesia Nomor 24 Tahun 2022 tentang Rekam Medis.
  • MySQL Reference Manual: FOREIGN KEY Constraints. Oracle. dev.mysql.com.
  • PostgreSQL Documentation: Constraints (bab Data Definition). postgresql.org.
#BasisData #Database #RMIK #3NF #PrimaryKey #ForeignKey
๐Ÿ“Œ Normalisasi 3NF: Tabel Rapi dengan Primary Key dan Foreign Key
๐Ÿ“–
Daftar Isi Kuliah Basis Data
Lihat seluruh 16 artikel seri ini dan lanjutkan belajar sesuai urutan.

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