Constraint adalah aturan yang ditegakkan oleh database pada data dalam tabel — menjamin integritas data di level database (bukan hanya dalam kode aplikasi). Yang utama: PRIMARY KEY, FOREIGN KEY, UNIQUE, , , dan .
Constraint adalah aturan yang ditegakkan oleh database pada data dalam tabel — menjamin integritas data di level database (bukan hanya dalam kode aplikasi). Yang utama: PRIMARY KEY, FOREIGN KEY, UNIQUE, , , dan .
NOT NULLCHECKDEFAULTCREATE TABLE users (
id INT PRIMARY KEY, -- unique + not null identifier
email VARCHAR(255) UNIQUE NOT NULL, -- must be unique AND present
age INT CHECK (age >= 0 AND age <= 120), -- must satisfy a condition
country VARCHAR(2) DEFAULT 'US', -- default value if not provided
role VARCHAR(20) NOT NULL DEFAULT 'user',
manager_id INT REFERENCES users(id) -- FOREIGN KEY (referential integrity)
);
PRIMARY KEY → uniquely identifies a row (unique + not null, indexed)
FOREIGN KEY → references another table's key (referential integrity)
UNIQUE → no duplicate values allowed in this column
NOT NULL → the column must have a value (can't be NULL)
CHECK → the value must satisfy a condition (age >= 0, status IN (...))
DEFAULT → a value used when none is provided on insert
-- ❌ relying only on application code to enforce uniqueness:
-- a race condition or a bug or a different app could insert a duplicate
-- ✅ a UNIQUE constraint guarantees it at the DB level — ALWAYS enforced,
-- regardless of which code or how many apps access the database
email VARCHAR(255) UNIQUE
Constraint database adalah baris pertahanan terakhir untuk integritas data — mereka ditegakkan apa pun kode yang menyisipkan data (aplikasi multiple, script, perubahan manual, atau kode yang bermasalah), dan mereka menangani race condition yang pemeriksaan level aplikasi lewatkan.
CHECK (price > 0) -- prices must be positive
CHECK (status IN ('active', 'inactive')) -- only valid statuses
CHECK (end_date > start_date) -- logical consistency
CHECK menerapkan aturan bisnis/domain langsung dalam schema.
Constraint sangat penting untuk mempertahankan integritas data — mereka menjamin bahwa data dalam database Anda memenuhi aturan (keunikan, kehadiran, nilai valid, referensi valid) di level database, yang fundamental untuk aplikasi yang andal, sehingga memahaminya sangat penting.
Mengetahui tipe constraint (PRIMARY KEY, FOREIGN KEY, UNIQUE, NOT NULL, CHECK, DEFAULT) dan apa yang masing-masing enforce adalah perlu untuk design schema yang tepat.
Poin konseptual paling penting adalah mengapa enforce di level database daripada hanya dalam kode aplikasi: constraint database adalah baris pertahanan terakhir untuk integritas data — mereka selalu ditegakkan terlepas dari kode mana atau berapa banyak aplikasi mengakses data, mereka menangkap bug yang pemeriksaan aplikasi mungkin lewatkan, dan secara krusial mereka menangani race condition yang validasi level aplikasi tidak bisa (misalnya dua insert simultan keduanya melewati pemeriksaan keunikan level aplikasi tetapi constraint UNIQUE dengan benar menolak duplikat).
Mengandal hanya pada kode aplikasi untuk integritas itu berisiko; constraint memberikan jaminan.
Memahami constraint CHECK untuk menerapkan aturan domain/bisnis (range valid, nilai yang diizinkan, konsistensi logis) langsung dalam schema juga bernilai.
Karena integritas data kritis untuk aplikasi yang andal, dan karena constraint memberikan jaminan level database yang melindungi terhadap bug, race condition, dan data yang tidak konsisten dengan cara yang kode aplikasi saja tidak bisa, memahami constraint — tipe, jaminan integritas mereka, dan pentingnya enforcement level database — adalah pengetahuan foundational penting untuk design database yang robust dan aspek kunci dari membangun aplikasi yang data-nya tetap konsisten dan valid.