jenis dan tipe data database | java php laravel linux mysql sql bootstrap html css query java php laravel linux mysql sql bootstrap html css query: jenis dan tipe data database

Tuesday, March 31, 2026

jenis dan tipe data database

BASIS DATA REKAM MEDIS MYSQL

Jenis & Tipe Data Basis Data: Integer, Char, Varchar, Boolean, Float, Decimal — Plus Penerapannya di Rekam Medis!

Bayangkan kamu menyimpan data pasien tapi salah pilih tipe data — nama pasien malah tersimpan sebagai angka, usia tersimpan sebagai teks, dan berat badan jadi error total. Disaster, kan? Yuk, kuasai tipe data basis data dari nol, sampai bisa desain database rekam medis kayak pro!

7+
Tipe Data Dibahas
MySQL
DBMS Populer #1
Rekam
Medis Real-Case

Halo, mahasiswa baru! Selamat datang di salah satu materi paling fundamental dalam kuliah basis data — yaitu jenis dan tipe data. Sebelum kamu bisa bikin database yang keren dan efisien, kamu wajib paham dulu "bahan baku" penyusunnya: tipe data.

Kalau basis data itu ibarat gudang, maka tipe data adalah rak-rak dengan label berbeda. Ada rak untuk angka bulat, rak untuk teks, rak untuk tanggal, dan sebagainya. Salah taruh barang ke rak yang salah? Sistem kamu bisa kacau balau, boros memori, bahkan error yang susah dilacak.

Artikel ini dirancang khusus buat kamu yang baru pertama kali ketemu mata kuliah basis data — dengan bahasa yang santai, analogi yang mudah dipahami, plus studi kasus nyata: penerapan tipe data pada sistem rekam medis. Karena belajar tipe data lebih seru kalau ada konteks dunia nyatanya! 🏥

💡
FAKTA MENARIK
Menurut Oracle Database Documentation, pemilihan tipe data yang tepat bisa menghemat penyimpanan hingga 60–80% dibanding asal-asalan pakai VARCHAR untuk semua field. Di sistem rekam medis rumah sakit besar yang menyimpan jutaan record, penghematan ini bisa bernilai ratusan juta rupiah per tahun!

Apa Itu Tipe Data dalam Basis Data? Kenapa Penting Banget?

Tipe data (data type) dalam basis data adalah kategori atau klasifikasi yang menentukan jenis nilai apa yang bisa disimpan dalam sebuah kolom atau atribut, berapa banyak memori yang dialokasikan, dan operasi apa saja yang bisa dilakukan terhadap nilai tersebut (Ramakrishnan & Gehrke, 2003).

Secara sederhana: tipe data adalah "kontrak" antara kamu dan database — kamu bilang "kolom ini isinya angka bulat antara 0–127", database bilang "oke, aku siapkan tempat 1 byte untuk itu".

📌 Tiga Alasan Tipe Data Sangat Krusial
1
Integritas Data — Mencegah data yang tidak valid masuk ke database (misalnya, nama pasien tidak bisa diisi angka negatif).
2
Efisiensi Penyimpanan — Tipe yang tepat = alokasi memori yang tepat = tidak boros storage.
3
Performa Query — Database memproses angka jauh lebih cepat daripada teks; pengindeksan juga lebih efisien (Elmasri & Navathe, 2015).

Jenis & Tipe Data dalam Basis Data Secara Umum

Secara umum, standar SQL (Structured Query Language) yang dirumuskan oleh ISO/IEC 9075 mengelompokkan tipe data ke dalam beberapa kategori besar. Inilah fondasi yang digunakan oleh hampir semua sistem manajemen basis data (DBMS), termasuk MySQL, PostgreSQL, Oracle, dan SQL Server.

🔢 NUMERIK Tipe Data Angka

Tipe data numerik digunakan untuk menyimpan nilai angka. Terbagi menjadi dua sub-kategori utama:

INTEGER (Bilangan Bulat)

Menyimpan bilangan bulat tanpa desimal. Analoginya: seperti menghitung jumlah orang — kamu tidak bisa punya 2,5 orang di ruang tunggu, kan? Ukurannya bervariasi tergantung range yang dibutuhkan.

TINYINT (1 byte) SMALLINT (2 byte) INT (4 byte) BIGINT (8 byte)
FLOAT & DECIMAL (Bilangan Desimal)

Untuk angka dengan koma/desimal. Bedanya: FLOAT itu "estimasi" (cocok untuk berat badan, suhu), sementara DECIMAL itu "presisi tinggi" (wajib untuk uang/keuangan, dosis obat). Kalau kamu pakai FLOAT untuk tagihan rumah sakit, siap-siap ada selisih aneh di angka desimalnya!

FLOAT (presisi ~7 digit) DOUBLE (presisi ~15 digit) DECIMAL(p,s) (presisi eksak)
🔤 KARAKTER Tipe Data Teks/String

Untuk menyimpan teks, huruf, dan karakter. Ini tipe data yang paling sering dipakai mahasiswa — tapi juga paling sering salah digunakan!

CHAR(n) — Fixed Length

Menyimpan teks dengan panjang tetap/fixed. Analoginya: seperti formulir dengan kotak isian yang sudah punya jumlah kotak pasti. Kalau kamu isi "AB", tapi fieldnya CHAR(10), maka 8 karakter sisanya akan diisi spasi kosong. Cocok untuk data yang panjangnya selalu sama, seperti kode diagnosis ICD-10 (misal: "A01.0").

VARCHAR(n) — Variable Length

Menyimpan teks dengan panjang bervariasi, maksimal n karakter. Jauh lebih fleksibel dan hemat storage dibanding CHAR. Cocok untuk nama pasien, alamat, keluhan, yang panjangnya tidak bisa diprediksi. Ini tipe data teks paling populer di dunia! (Silberschatz et al., 2019)

TEXT — Very Long String

Untuk teks yang sangat panjang (dokumen, catatan dokter, anamnesis panjang). Di MySQL tersedia TINYTEXT, TEXT, MEDIUMTEXT, hingga LONGTEXT.

✅ BOOLEAN Tipe Data Logika

Hanya punya dua nilai: TRUE atau FALSE (ya atau tidak). Simpel tapi sangat powerful! Analoginya: lampu — cuma bisa nyala atau mati. Cocok untuk: status aktif pasien, apakah pasien memiliki alergi, apakah sudah menikah, apakah kunjungan darurat, dan sebagainya. Di MySQL, ini diimplementasikan sebagai TINYINT(1) dengan nilai 0 (FALSE) dan 1 (TRUE).

📅 DATETIME Tipe Data Tanggal & Waktu

Khusus menyimpan informasi temporal. Di rekam medis, ini sangat krusial untuk mencatat kapan pasien datang, kapan pemeriksaan dilakukan, kapan obat diberikan.

DATE — tanggal saja TIME — jam saja DATETIME — tanggal + jam TIMESTAMP — termasuk timezone
🎯
TIPS PENTING — CHAR vs VARCHAR
Gunakan CHAR hanya jika panjang datanya selalu konsisten (misal: kode pos 5 digit, kode ICD-10). Untuk semua teks yang panjangnya bervariasi seperti nama orang atau alamat, selalu gunakan VARCHAR. Menggunakan CHAR(255) untuk nama padahal rata-rata nama hanya 20 karakter = boros storage 12x lipat!

Tipe Data di MySQL: Panduan Lengkap + Perbandingan

MySQL adalah DBMS open-source paling populer di dunia — digunakan oleh Facebook, YouTube, Twitter, dan tentu saja ribuan sistem informasi rumah sakit di Indonesia (MySQL Documentation, 2024). Menurut DB-Engines Ranking, MySQL secara konsisten menempati posisi kedua DBMS paling banyak digunakan secara global.

Berikut adalah tabel lengkap tipe data MySQL beserta kegunaannya:

Tipe Data Ukuran Range Nilai Contoh Penggunaan
TINYINT 1 byte -128 s/d 127 Jumlah tablet obat, status (0/1)
SMALLINT 2 byte -32.768 s/d 32.767 Nomor antrian, tahun lahir
INT / INTEGER 4 byte ~-2.1M s/d ~2.1M ID pasien, ID kunjungan
BIGINT 8 byte ~-9.2 Kuadriliun ID untuk sistem skala nasional
FLOAT 4 byte ~7 digit desimal Berat badan, tinggi badan, suhu
DOUBLE 8 byte ~15 digit desimal Hasil lab dengan presisi tinggi
DECIMAL(p,s) Variabel Presisi eksak Biaya/tagihan, dosis obat (penting!)
Tipe Data Ukuran Maks Karakteristik Contoh Field Rekam Medis
CHAR(n) 255 karakter Panjang tetap kode_icd, jenis_kelamin ('L'/'P')
VARCHAR(n) 65.535 byte Panjang variabel nama_pasien, alamat, no_telepon
TEXT 65.535 byte Teks panjang catatan_dokter, anamnesis, keluhan
TINYINT(1) 1 byte Boolean (0/1) status_aktif, punya_alergi, darurat
DATE 3 byte Format YYYY-MM-DD tanggal_lahir, tanggal_kunjungan
DATETIME 8 byte Tanggal + jam waktu_masuk, waktu_keluar ICU
TIMESTAMP 4 byte Dengan timezone, auto-update created_at, updated_at record
🔬
INSIGHT PENTING — FLOAT vs DECIMAL
Coba jalankan query ini di MySQL: SELECT 0.1 + 0.2; — hasilnya bukan 0.3, melainkan 0.30000000000000004! Inilah "floating point imprecision" yang terjadi pada FLOAT/DOUBLE. Untuk data keuangan seperti tagihan pasien atau dosis obat, selalu gunakan DECIMAL demi akurasi 100%. Ini bukan bug MySQL — ini sifat dasar bilangan floating point di semua komputer (IEEE 754 Standard).

Implementasi Nyata: Tipe Data pada Tabel Pasien & Kunjungan Rekam Medis

Oke, sekarang waktunya kita lihat bagaimana semua teori di atas diterapkan dalam konteks nyata — sistem informasi rekam medis. Berdasarkan standar rekam medis yang diatur dalam Permenkes No. 269 Tahun 2008 tentang Rekam Medis, dan panduan teknis sistem informasi rumah sakit dari Kementerian Kesehatan RI, berikut contoh desain tabel yang baik:

MySQL — Tabel Data Pasien
SQL DDL
CREATE TABLE tbl_pasien (
    id_pasien       INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,   -- PK, angka bulat positif
    no_rekam_medis  CHAR(10) NOT NULL UNIQUE,                  -- Fixed 10 karakter, unik
    nik             CHAR(16) NOT NULL UNIQUE,                  -- NIK selalu 16 digit
    nama_pasien     VARCHAR(100) NOT NULL,                      -- Nama bervariasi, maks 100 char
    jenis_kelamin   CHAR(1) NOT NULL,                           -- 'L' atau 'P', fixed 1 char
    tanggal_lahir   DATE NOT NULL,                              -- Format YYYY-MM-DD
    alamat          VARCHAR(255),                               -- Alamat panjangnya bervariasi
    no_telepon      VARCHAR(15),                                -- Nomor HP, simpan sebagai teks!
    golongan_darah  CHAR(3),                                    -- A, B, AB, O (maks 2-3 char)
    punya_alergi    TINYINT(1) DEFAULT 0,                       -- Boolean: 0=tidak, 1=ya
    status_aktif    TINYINT(1) DEFAULT 1,                       -- Boolean: 1=aktif, 0=nonaktif
    berat_badan     FLOAT(5,2),                                  -- Berat dalam kg, misal: 65.50
    tinggi_badan    FLOAT(5,1),                                  -- Tinggi dalam cm, misal: 170.5
    catatan_alergi  TEXT,                                       -- Deskripsi alergi, bisa panjang
    created_at      TIMESTAMP DEFAULT CURRENT_TIMESTAMP,        -- Otomatis diisi waktu insert
    PRIMARY KEY (id_pasien)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
MySQL — Tabel Kunjungan Rekam Medis
SQL DDL
CREATE TABLE tbl_kunjungan (
    id_kunjungan    INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,   -- PK kunjungan
    id_pasien       INT(11) UNSIGNED NOT NULL,                  -- FK ke tbl_pasien
    tanggal_kunjungan DATE NOT NULL,                          -- Kapan pasien datang
    waktu_masuk     DATETIME NOT NULL,                          -- Jam masuk (penting untuk UGD)
    waktu_keluar    DATETIME,                                   -- Jam keluar (bisa NULL)
    poli_tujuan     VARCHAR(50) NOT NULL,                        -- Nama poli, bervariasi
    kode_dokter     CHAR(8) NOT NULL,                           -- Kode dokter, fixed 8 char
    keluhan_utama   TEXT,                                       -- Deskripsi keluhan panjang
    diagnosis       VARCHAR(255),                               -- Diagnosis, bervariasi
    kode_icd10      CHAR(7),                                    -- Kode ICD-10 selalu format tetap
    tekanan_darah_systole  SMALLINT,                        -- Misal: 120 (mmHg)
    tekanan_darah_diastole SMALLINT,                        -- Misal: 80 (mmHg)
    suhu_tubuh      FLOAT(4,1),                                  -- Suhu dalam celsius, misal: 36.7
    biaya_kunjungan DECIMAL(12,2) NOT NULL DEFAULT 0.00,      -- WAJIB DECIMAL untuk uang!
    jenis_pembayaran VARCHAR(20),                              -- 'BPJS', 'Umum', 'Asuransi'
    kunjungan_darurat TINYINT(1) DEFAULT 0,                   -- Boolean: 1=UGD, 0=reguler
    catatan_dokter  TEXT,                                       -- Catatan SOAP, bisa sangat panjang
    updated_at      TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,      -- Otomatis update saat diubah
    PRIMARY KEY (id_kunjungan),
    FOREIGN KEY (id_pasien) REFERENCES tbl_pasien(id_pasien)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
🔍 Analisis Pilihan Tipe Data — Kenapa Begitu?
💬 no_telepon → VARCHAR bukan INT?
Nomor HP yang diawali 0 (misal: 081234) jika disimpan sebagai INT akan hilang leading zero-nya jadi 81234. Selain itu, tidak ada operasi matematika pada nomor HP!
💰 biaya → DECIMAL, BUKAN FLOAT?
DECIMAL menyimpan nilai eksak tanpa pembulatan floating-point. Tagihan Rp 150.000,50 harus persis, bukan Rp 150.000,499999... Ini standar dalam sistem keuangan manapun.
🩺 kode_icd10 → CHAR(7)?
Kode ICD-10 selalu berformat tetap seperti "A01.0", "J06.9" — panjangnya konsisten 3-7 karakter. CHAR lebih efisien karena tidak perlu metadata panjang seperti VARCHAR.
🩸 tekanan_darah → SMALLINT?
Tekanan darah nilainya 0-300 mmHg — masuk dalam range SMALLINT (max 32.767). Lebih hemat dari INT (4 byte) padahal nilainya jauh di bawah batas SMALLINT.
⚠️
KESALAHAN UMUM MAHASISWA — Wajib Hindari!
❌ Pakai VARCHAR(255) untuk semua kolom — Ini anti-pattern yang sangat umum. Sesuaikan panjang VARCHAR dengan kebutuhan nyata data. Nama pasien di Indonesia jarang melebihi 50-60 karakter, jadi VARCHAR(100) sudah lebih dari cukup, bukan VARCHAR(255).

❌ Pakai TEXT untuk semua deskripsi pendek — Kolom TEXT tidak bisa diindex di MySQL (secara default). Jika kamu sering melakukan search/filter pada kolom itu, gunakan VARCHAR.

❌ Simpan tanggal sebagai VARCHAR — Seperti menulis "12 Maret 2024" dalam kolom VARCHAR. Akibatnya kamu tidak bisa melakukan operasi tanggal seperti menghitung usia atau rentang tanggal kunjungan!
📚
REFERENSI & SUMBER VALID
  • Elmasri, R. & Navathe, S.B. (2015). Fundamentals of Database Systems (7th ed.). Pearson Education.
  • Ramakrishnan, R. & Gehrke, J. (2003). Database Management Systems (3rd ed.). McGraw-Hill.
  • Silberschatz, A., Korth, H.F., & Sudarshan, S. (2019). Database System Concepts (7th ed.). McGraw-Hill.
  • MySQL AB. (2024). MySQL 8.0 Reference Manual: Data Types. Oracle Corporation. https://dev.mysql.com/doc/refman/8.0/en/data-types.html
  • Kementerian Kesehatan RI. (2008). Peraturan Menteri Kesehatan No. 269/MENKES/PER/III/2008 tentang Rekam Medis. Jakarta: Kemenkes RI.
  • ISO/IEC. (2016). ISO/IEC 9075-1:2016 — Information technology — Database languages — SQL. International Organization for Standardization.

Kesimpulan: Tipe Data adalah Fondasi Database yang Tidak Bisa Diabaikan

Oke, kamu sudah sampai di akhir artikel ini — selamat! 🎉 Mari kita rekap apa yang sudah kita pelajari bersama:

Tipe data bukan sekadar formalitas teknis — ini adalah keputusan desain yang memengaruhi integritas, efisiensi, dan performa seluruh sistem basis data kamu.
INTEGER untuk angka bulat, FLOAT untuk desimal umum, DECIMAL untuk nilai finansial/kritis presisi tinggi.
CHAR untuk teks panjang tetap, VARCHAR untuk teks bervariasi, TEXT untuk teks sangat panjang.
TINYINT(1) sebagai pengganti BOOLEAN di MySQL, dan tipe DATE/DATETIME/TIMESTAMP untuk semua data temporal — jangan pernah simpan tanggal sebagai teks!
Dalam konteks rekam medis, pilihan tipe data yang salah bisa berdampak serius — mulai dari error perhitungan tagihan hingga kegagalan pencarian data pasien kritis.
🚀 Langkah Selanjutnya untuk Kamu
Coba praktikkan langsung! Buat database MySQL baru, buat tabel tbl_pasien dan tbl_kunjungan dari contoh di atas, lalu coba INSERT beberapa data dan lihat bagaimana MySQL memvalidasi tipe datanya. Belajar tipe data itu harus langsung di tangan, bukan cuma dibaca! 💪
💬 Yuk, Diskusi di Kolom Komentar!
Ada yang masih bingung antara FLOAT vs DECIMAL? Atau punya pertanyaan soal desain database rekam medis? Tulis di komentar — kita bahas bareng! Kalau artikel ini bermanfaat, share ke teman sekelas yang juga lagi belajar basis data. Mereka pasti butuh ini juga! 🙌
💬 Tulis Komentar 📤 Share Artikel
#BasisData #TipeData #MySQL #RekamMedis #SistemInformasi #KuliahKomputer #Integer #Varchar #Decimal
META DESCRIPTION (155 karakter)
Pelajari jenis & tipe data basis data: integer, char, varchar, boolean, float, decimal di MySQL, lengkap dengan penerapannya pada variabel data pasien dan kunjungan rekam medis.

No comments:

Post a Comment

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