Apakah Anda perlu menyimpan nilai boolean di database SQL Anda?
Daftar isi
Apa itu Boolean?
Boolean adalah tipe data yang dapat menyimpan nilai True atau False. Ini sering disimpan sebagai 1 (benar) atau 0 (salah). Itu dinamai George Boole yang pertama kali mendefinisikan sistem logika aljabar di abad ke-19
Nilai Boolean umum dalam bahasa pemrograman, tetapi apakah ada dalam SQL?
Jawabannya tergantung pada vendor database mana yang Anda gunakan
Kabar baiknya adalah meskipun tidak ada tipe data boolean khusus, Anda dapat mencapai fungsionalitas yang sama menggunakan tipe data lainnya
Apakah Ada Boolean di SQL?
Tabel ini menunjukkan ada atau tidaknya tipe data boolean di setiap vendor SQL
DatabaseBoolean?Gunakan SebaliknyaOracleNoNUMBER(1)SQL ServerNoBITMySQLNoBIT atau TINYINTPostgreSQLYa
Oracle Boolean
Apakah ada tipe data boolean di Oracle SQL?
Tidak, tidak ada
Anda tidak dapat mendeklarasikan kolom dengan tipe data BOOLEAN
Namun, ada beberapa alternatif, yang telah saya jelaskan di bawah ini
Cara yang disarankan untuk menyimpan boolean di Oracle SQL adalah dengan menggunakan kolom NUMBER(1). Ini dapat menyimpan 1 sebagai benar dan 0 sebagai salah
CREATE TABLE testbool ( sometext VARCHAR2(10), is_checked NUMBER(1) );Anda dapat menambahkan batasan centang pada kolom untuk memastikan nilai lain tidak dapat dimasukkan
CREATE TABLE testbool ( sometext VARCHAR2(10), is_checked NUMBER(1), CONSTRAINT ck_testbool_ischk CHECK (is_checked IN (1,0)) );_Ini berarti Anda dapat memasukkan 1 (untuk BENAR) atau 0 (untuk SALAH) ke dalam kolom ini
INSERT INTO testbool (sometext, is_checked) VALUES ('a', 1); INSERT INTO testbool (sometext, is_checked) VALUES ('b', 0);Saat Anda memilih nilai ini, nilai tersebut ditampilkan hanya sebagai 1 atau 0
SELECT sometext, is_checked FROM testbool;SOMETEXTIS_CHECKEDa1b0Anda dapat mengonversi nilai ini menjadi nilai lain untuk ditampilkan dalam aplikasi jika Anda tidak ingin menampilkan 1 atau 0
Ada beberapa metode lain untuk menyimpan boolean, yang telah saya soroti di akhir postingan, termasuk alasan mengapa saya tidak merekomendasikannya
PL/SQL memiliki tipe data boolean, jadi jika Anda menulis kode PL/SQL (prosedur tersimpan, misalnya), Anda dapat menggunakan tipe data boolean
SQL Server Boolean
Tidak ada tipe data boolean di SQL Server
Namun, opsi umum adalah menggunakan tipe data BIT
Tipe data BIT digunakan untuk menyimpan nilai bit dari 1 hingga 64. Jadi, bidang BIT dapat digunakan untuk boolean, memberikan 1 untuk BENAR dan 0 untuk SALAH
CREATE TABLE testbool ( sometext VARCHAR(10), is_checked BIT );_Ini berarti Anda dapat memasukkan 1 (untuk BENAR) atau 0 (untuk SALAH) ke dalam kolom ini. Tidak perlu menambahkan batasan centang karena nilai BIT hanya menerima 1 atau 0
INSERT INTO testbool (sometext, is_checked) VALUES ('a', 1); INSERT INTO testbool (sometext, is_checked) VALUES ('b', 0);Saat Anda memilih nilai ini, nilai tersebut ditampilkan sebagai 1 atau 0
SELECT sometext, is_checked FROM testbool;SOMETEXTIS_CHECKEDa1b0Anda dapat mengonversi nilai ini menjadi nilai lain untuk ditampilkan dalam aplikasi jika Anda tidak ingin menampilkan 1 atau 0
Boolean MySQL
MySQL memang memiliki tipe data boolean. Namun, itu hanya sinonim untuk TINYINT yang merupakan bidang numerik
Alternatif umum adalah menggunakan bidang BIT
Tipe data BIT digunakan untuk menyimpan nilai bit dari 1 hingga 64. Jadi, bidang BIT(1) dapat digunakan untuk boolean, memberikan 1 untuk BENAR dan 0 untuk SALAH. Sama seperti di SQL Server
CREATE TABLE testbool ( sometext VARCHAR(10), is_checked BIT(1) );Ini berarti Anda dapat memasukkan 1 (untuk BENAR) atau 0 (untuk SALAH) ke dalam kolom ini. Tidak perlu menambahkan batasan centang karena nilai BIT hanya menerima 1 atau 0
INSERT INTO testbool (sometext, is_checked) VALUES ('a', 1); INSERT INTO testbool (sometext, is_checked) VALUES ('b', 0);Saat Anda memilih nilai ini, nilai tersebut ditampilkan hanya sebagai 1 atau 0
SELECT sometext, is_checked FROM testbool;SOMETEXTIS_CHECKEDa1b0Anda dapat mengonversi nilai ini menjadi nilai lain untuk ditampilkan dalam aplikasi jika Anda tidak ingin menampilkan 1 atau 0
Alternatifnya, karena MySQL memetakan tipe data BOOLEAN ke tipe data TINYINT, menggunakan BOOLEAN atau TINYINT(1) bisa mendapatkan hasil yang sama
Ada beberapa metode lain untuk menyimpan boolean, yang telah saya soroti di akhir postingan, termasuk alasan mengapa saya tidak merekomendasikannya
PostgreSQL Boolean
PostgreSQL memang memiliki tipe data boolean
Anda dapat menyimpan benar atau salah dalam kolom ini, yang dapat diwakili oleh banyak nilai yang berbeda
- BENAR. diwakili oleh TRUE, 't', 'true', 'y', 'yes', 'on', '1'
- SALAH. diwakili oleh FALSE, 'f', 'false', 'n', 'no', 'off', '0'
Kata kunci BENAR dan SALAH lebih disukai
Contoh tipe data boolean di PostgreSQL adalah
CREATE TABLE testbool ( sometext VARCHAR2(10), is_checked NUMBER(1), CONSTRAINT ck_testbool_ischk CHECK (is_checked IN (1,0)) );_0Anda dapat menyisipkan nilai boolean menggunakan pernyataan INSERT
CREATE TABLE testbool ( sometext VARCHAR2(10), is_checked NUMBER(1), CONSTRAINT ck_testbool_ischk CHECK (is_checked IN (1,0)) );_1Saat Anda memilih nilai boolean, nilai itu ditampilkan sebagai 't' atau 'f'
SELECT sometext, is_checked FROM testbool;SOMETEXTIS_CHECKEDatbf
Alternatif Boolean
Jika database Anda tidak mendukung tipe data boolean, ada beberapa metode alternatif
NOMOR(1) dengan 1 dan 0
Ini adalah opsi yang bagus untuk Oracle karena tidak menyertakan tipe data BIT
Anda dapat membuat kolom dengan tipe data NUMBER(1), dan menggunakan batasan centang untuk menerapkan 1 atau 0
CREATE TABLE testbool ( sometext VARCHAR2(10), is_checked NUMBER(1), CONSTRAINT ck_testbool_ischk CHECK (is_checked IN (1,0)) );_Ini akan berfungsi sebagai boolean. Namun, jika Anda menggunakan SQL Server atau MySQL, tipe data BIT lebih tepat karena lebih sederhana dan memiliki pemeriksaan bawaan jika nilainya 1 atau 0
Kalau tidak, itu alternatif yang bagus
CHAR(1) atau VARCHAR(1) dengan T dan F
Menggunakan bidang CHAR satu karakter adalah opsi lain yang disarankan. Dua karakter bisa jadi T untuk TRUE dan F untuk FALSE
CREATE TABLE testbool ( sometext VARCHAR2(10), is_checked NUMBER(1), CONSTRAINT ck_testbool_ischk CHECK (is_checked IN (1,0)) );_4Anda bisa menambahkan batasan centang untuk memastikan nilainya T atau F
Namun, masalahnya adalah itu tidak diakui secara global. Dalam bahasa Inggris, T dan F bisa berarti Benar atau Salah. Tapi bagaimana dengan bahasa Prancis atau Jerman atau Spanyol atau bahasa lainnya?
Jika Anda mengharapkan pengembang lain dari negara lain maka T/F mungkin bukan pilihan terbaik
CHAR(1) atau VARCHAR(1) dengan Y dan N
Alasan yang sama seperti menggunakan T/F dapat diterapkan untuk menggunakan Y/N. Bidang karakter tunggal yang didesain hanya untuk menampung Y atau N dapat digunakan untuk boolean
Batasan pemeriksaan bersifat opsional tetapi disarankan
CREATE TABLE testbool ( sometext VARCHAR2(10), is_checked NUMBER(1), CONSTRAINT ck_testbool_ischk CHECK (is_checked IN (1,0)) );_5Namun, seperti menggunakan T/F, menggunakan Y/N tidak dapat dikenali dalam bahasa lain. Itu bisa membingungkan pengembang lain yang tidak terbiasa melihat Y untuk Ya dan N untuk Tidak
Kesimpulan
Tipe data boolean yang umum di bahasa pemrograman lain tidak selalu tersedia di SQL. PostgreSQL memiliki tipe data boolean, dan vendor database lainnya mengizinkan metode lain untuk menangkap nilai benar/salah yang digunakan untuk boolean