Constraint: Penjaga Kualitas Data (PK, NOT NULL, UNIQUE, CHECK, DEFAULT)

Memakai constraint agar database menolak data yang salah: PRIMARY KEY, NOT NULL, UNIQUE, CHECK, DEFAULT, dan sekilas FOREIGN KEY.

Part 4 dari 25 ± 35 menit Gratis

Analogi: Constraint itu seperti satpam di pintu masuk gedung. Ia tidak peduli siapa yang mengirim data (aplikasimu, temanmu, atau skrip ceroboh); aturan tetap berlaku. NOT NULL = "wajib bawa KTP", UNIQUE = "satu orang satu kartu anggota", CHECK = "usia minimal 17", DEFAULT = "kalau tidak mengisi, kami isikan".

Kenapa perlu constraint?

Aplikasi bisa punya bug, dan manusia bisa salah ketik. Kalau database menerima apa saja, lama-lama datanya kotor: umur minus, email ganda, nama kosong. Constraint adalah "satpam" yang dipasang langsung di tabel: data yang melanggar aturan akan ditolak dengan error, siapa pun yang mengirimnya.

Analogi: constraint itu seperti petugas tiket di stasiun. Tiket tidak valid? Tidak boleh masuk, tanpa pengecualian.

Lima constraint utama

ConstraintAturannyaContoh
PRIMARY KEYUnik dan tidak boleh NULL; pengenal setiap barisid SERIAL PRIMARY KEY
NOT NULLKolom wajib diisinama VARCHAR(80) NOT NULL
UNIQUETidak boleh ada nilai kembaremail VARCHAR(100) UNIQUE
CHECKNilai harus memenuhi syaratumur INTEGER CHECK (umur >= 17)
DEFAULTNilai otomatis bila tidak diisistatus VARCHAR(20) DEFAULT 'aktif'

Contoh lengkap

CREATE TABLE anggota (
  id     SERIAL PRIMARY KEY,
  nama   VARCHAR(80) NOT NULL,
  email  VARCHAR(100) UNIQUE,
  umur   INTEGER CHECK (umur >= 17),
  status VARCHAR(20) DEFAULT 'aktif'
);

Sekarang coba bayangkan beberapa percobaan memasukkan data:

INSERT INTO anggota (nama, umur) VALUES ('Rani', 25);   -- OK, status otomatis 'aktif'
INSERT INTO anggota (nama, umur) VALUES ('Tono', 12);   -- ERROR: melanggar CHECK (umur >= 17)
INSERT INTO anggota (nama, umur) VALUES (NULL, 30);     -- ERROR: nama NOT NULL

Pesan error PostgreSQL biasanya jelas, misalnya: null value in column "nama" violates not-null constraint atau duplicate key value violates unique constraint.

NULL itu apa?

NULL berarti "tidak ada nilai / tidak diketahui". Ia bukan angka 0 dan bukan teks kosong. Kolom tanpa NOT NULL boleh NULL. Perhatikan: CHECK dan UNIQUE tidak mempermasalahkan NULL, jadi kalau nilai wajib ada, gabungkan dengan NOT NULL.

Sekilas FOREIGN KEY

Constraint kelima yang penting adalah FOREIGN KEY (kunci tamu) yang menjaga hubungan antartabel, misalnya setiap buku harus merujuk ke kategori yang benar-benar ada:

kategori_id INTEGER REFERENCES kategori(id)

Kita bahas tuntas di bab Relasi nanti.

Memberi nama constraint

CONSTRAINT cek_umur CHECK (umur >= 17)

Nama membantu saat membaca pesan error atau menghapus constraint di kemudian hari.

Kasus nyata: mencegah saldo minus dan email ganda

Di sistem rekening, bug aplikasi pernah membuat saldo menjadi minus. Dengan satu baris constraint, database menolaknya sebelum data rusak:

CREATE TABLE rekening (
  id     SERIAL PRIMARY KEY,
  pemilik VARCHAR(50) NOT NULL,
  saldo  INTEGER NOT NULL CHECK (saldo >= 0)
);
UPDATE rekening SET saldo = saldo - 999999999 WHERE pemilik = 'Ayu';
-- ERROR: new row violates check constraint

Inilah prinsip defense in depth: validasi di aplikasi bisa terlewat, constraint di database tidak bisa dilewati.

Kesalahan yang sering terjadi

  • Hanya mengandalkan validasi di form web. Data bisa masuk lewat jalur lain (API, impor CSV, skrip).
  • Memberi UNIQUE pada kolom yang boleh kosong lalu bingung, padahal PostgreSQL mengizinkan banyak NULL pada kolom UNIQUE.
  • Menambah constraint ke tabel yang sudah berisi data tidak valid. Bersihkan datanya dulu, baru tambahkan aturan.

Praktikkan langsung, gratis

Tulis dan jalankan kode langsung di browser, dapatkan penilaian otomatis. Daftar gratis kapan saja untuk menyimpan progres dan meraih sertifikat.

Coba latihan sekarang, tanpa daftar
Bagikan: WhatsApp Facebook LinkedIn X