Featured image of post Menyimpan Mata Uang di Database: Haruskah Anda Menggunakan DECIMAL atau BIGINT?

Menyimpan Mata Uang di Database: Haruskah Anda Menggunakan DECIMAL atau BIGINT?

Saat mengembangkan sistem pembayaran, tipe field apa yang harus Anda gunakan untuk mata uang? Artikel ini menjelaskan mengapa Anda sama sekali tidak boleh menggunakan FLOAT, dan bagaimana memilih antara DECIMAL dan BIGINT untuk membuat sistem penyimpanan mata uang yang berkinerja tinggi dan bebas kesalahan.

Saat mengembangkan sistem pembayaran atau e-commerce, pernahkah Anda mempertimbangkan untuk menggunakan FLOAT atau DOUBLE untuk field jumlah database?

Jika iya, berhentilah sekarang juga! Sistem Anda mungkin secara diam-diam membocorkan uang.

Mengapa angka floating-point dilarang dalam sistem keuangan? Kesalahan presisi yang tampaknya tidak signifikan, terakumulasi dalam volume transaksi yang besar dan waktu yang lama, dapat menyebabkan bencana yang tidak dapat diubah.

Jadi, apa sebenarnya yang harus kita gunakan untuk menyimpan uang?

Mengapa FLOAT Beracun bagi Sistem Keuangan?

Di dunia komputer, angka direpresentasikan dalam biner. FLOAT (angka floating-point), ketika merepresentasikan pecahan desimal tertentu, sebenarnya adalah “perkiraan.” Ibarat mencoba memotong kue yang lembut dengan gergaji mesin yang kasar; betapapun hati-hatinya Anda, beberapa remah-remah pasti akan berjatuhan di bagian tepinya.

Contoh klasiknya adalah: 0.1 + 0.2 pada komputer seringkali tidak sama dengan 0.3. Jika Anda memproses jutaan transaksi, kesalahan kecil “0.00000000000000004” ini akan terus bertambah, dan buku besar tidak akan pernah seimbang. Ingatlah:

Jika menyangkut uang, “perkiraan” apa pun adalah bencana.

Buku Besar Akuntan yang Tepat: Keunggulan DECIMAL

Jika Anda menginginkan solusi tepat yang mana “apa yang Anda lihat adalah apa yang Anda dapatkan,” DECIMAL adalah angka titik tetap (fixed-point number) bawaan database dan standar industri.

DECIMAL seperti buku besar akuntan yang sangat teliti; ia memisahkan bilangan bulat (integer) dan desimal dengan sangat akurat, memastikan 0.1 + 0.2 benar-benar sama dengan 0.3.

Rasio Emas Industri: DECIMAL(19, 4)

Kami biasanya merekomendasikan penggunaan DECIMAL(19, 4):

  • 19: Mewakili total kapasitas 19 digit (presisi).
  • 4: Menunjukkan retensi 4 digit di belakang titik desimal.

Mengapa mempertahankan 4 tempat desimal? Karena selama perhitungan suku bunga, tarif pajak, atau nilai tukar mata uang, langkah-langkah perantara sering kali menghasilkan lebih dari 2 tempat desimal. Menyediakan 2 digit buffer ekstra akan meningkatkan akurasi penghitungan, dan Anda cukup membulatkannya sesuai kebutuhan bisnis di akhir proses.

Kapasitas ini bahkan cukup besar bagi Anda untuk membeli total PDB dari beberapa planet Bumi!

Apakah Ini Cukup untuk Skenario Keuangan di Dunia Nyata?

Mengambil DECIMAL(19, 4) sebagai contoh:

  • Digit bilangan bulat: 15 digit
  • Jumlah maksimum: 999,999,999,999,999
  • Konversi USD: Sekitar 999 Triliun USD
Referensi Jumlah
PDB AS Sekitar $27 Triliun
Total PDB Global Sekitar $105 Triliun
Total Kekayaan Global Sekitar $454 Triliun

DECIMAL(19, 4) dapat mengakomodasi angka yang jauh melebihi total kekayaan global, yang tentunya sangat memadai untuk sebagian besar sistem keuangan.

Batas Makismum Presisi DECIMAL yang Didukung oleh Database Utama

Database Presisi Maksimum
MySQL / MariaDB 65
PostgreSQL 131072 (digit bilangan bulat) + 16383 (digit desimal)
SQL Server 38
Oracle 38

Mesin Token Arkade: Metode BIGINT untuk Unit Terkecil

Jika Anda mendambakan kinerja pamungkas, atau jika sistem Anda memiliki tuntutan konkurensi (concurrency) ultra-tinggi seperti Stripe atau Alipay, maka BIGINT (metode penyimpanan bilangan bulat) bisa menjadi pilihan utama Anda.

Pendekatan ini ibarat mesin token arkade: tidak peduli berapa banyak uang yang Anda masukkan, mesin akan mengubahnya menjadi “unit terkecil” untuk penyimpanan. Misalnya:

  • $100.50 USD → Disimpan sebagai 10050 (sen)
  • 100 TWD → Disimpan sebagai 100 (dolar)

Mengapa Memilih BIGINT?

Alasan Deskripsi
Kecepatan Sangat Kilat Penambahan dan pengurangan bilangan bulat (integer) adalah spesialisasi CPU; kinerja perhitungannya biasanya lebih komputasional dan lebih cepat dibandingkan DECIMAL.
Efisiensi Ruang Penyimpanan Alokasi tetap 8 byte, sangat cocok untuk database berskala besar.

Dibalik itu, kekurangannya terletak pada tingkat keterbacaan yang lebih buruk. Saat Anda membuka database dan melihat 10050, Anda harus segera asuh untuk membaginya dengan 100 di kepala Anda (atau di dalam kode program Anda).

Pertarungan Puncak: Bagaimana Cara Memilih?

Untuk membuat keputusan terkait metode yang mana untuk diterapkan, kita harus bersandar pada aspek “Frekuensi permintaan kueri” and “Skala pada seluruh sistem”:

Aspek Komparasi DECIMAL BIGINT
Tingkat Keterbacaan Begitu brilian (dapat membaca angka secara langsung) Sedikit lebih buruk (membutuhkan konversi manual)
Kecepatan Secara Komputasi Lazim / Regular Benar-benar sangat cepat secara kilat
Skenario Untuk Pengaplikasian Praktis ERP, sistem manajemen finansial ranah internal, hingga sistem e-commerce berkaidah umum Transaksi dengan gelombang intensitas frekuensi tinggi, layanan format micro-services bervolume jumbo eksklusif, sampai implementasi API berlanggam dari Stripe

Saran Berdasarkan Prinsip Praktis

Skenario Pengaplikasian Spesifik Field yang Direkomendasikan
E-commerce pada ranah konvensional, portal sistem laporan internal khusus industri tatkala mana akuntan-akuntan harus senantiasa mengeksekusi SQL secara presisi dan frontal bagi kepentingan audit. DECIMAL(19, 4)
Sistem perdangangan bertaraf transaksi cepat berkonsentrasi tingkat tinggi, entah persuratan tuntutan berskala ekstrem BIGINT

Rangkuman

Secara gamblang, tak menyoal opsi dan aral format mana yang Anda anut, jangan pernah, tanpa terkecuali, dilarang selamanya memprakttikkan penggunaan modul FLOAT guna menimbun lembaran uang kas masuk Patikan preferensi lapangan field bernotasi tepat dijamin menyempurnakan struktur kelegaan dan kekuatan laksana karang mantap sepanjang perihal penyelesaian ranah perasuransian dan keuangan yang merundung.

All rights reserved,未經允許不得隨意轉載
Dibangun dengan Hugo
Tema Stack dirancang oleh Jimmy