PostgreSQL memberlakukan integritas data melalui constraints — aturan pada data tabel. Selain yang standar (, , , , , ), Postgres menambahkan opsi powerful seperti constraints dan fleksibel expressions.
PostgreSQL memberlakukan integritas data melalui constraints — aturan pada data tabel. Selain yang standar (, , , , , ), Postgres menambahkan opsi powerful seperti constraints dan fleksibel expressions.
PRIMARY KEYFOREIGN KEYUNIQUENOT NULLCHECKDEFAULTCHECKCREATE TABLE bookings (
id SERIAL PRIMARY KEY, -- unique identifier
room_id INT NOT NULL REFERENCES rooms(id), -- foreign key (referential integrity)
email VARCHAR(255) UNIQUE NOT NULL, -- unique + required
guests INT CHECK (guests > 0 AND guests <= 10), -- value constraint
status TEXT DEFAULT 'pending' -- default value
);
PRIMARY KEY → unique row identifier
FOREIGN KEY → references another table (referential integrity, with ON DELETE options)
UNIQUE → no duplicate values
NOT NULL → must have a value
CHECK → value must satisfy a condition
DEFAULT → default value when not provided
CHECK (price > 0)
CHECK (end_date > start_date) -- logical consistency between columns
CHECK (status IN ('active', 'inactive', 'pending'))
CHECK (email ~ '^[^@]+@[^@]+\.[^@]+$') -- regex validation
Postgres CHECK constraints dapat memberlakukan rich business rules, termasuk kondisi lintas-kolom dan pola regex.
-- prevent OVERLAPPING bookings for the same room (impossible with UNIQUE alone!)
CREATE TABLE bookings (
room_id INT,
during TSRANGE, -- a time range
EXCLUDE USING GIST (room_id WITH =, during WITH &&) -- no two rows where room_id is
); -- equal AND time ranges OVERLAP
EXCLUDE constraints (fitur spesifik Postgres) mencegah baris yang berkonflik berdasarkan operator kustom — terkenal untuk mencegah overlapping time ranges (double-bookings), yang tidak dapat dilakukan UNIQUE constraint.
-- check constraints at COMMIT instead of immediately (useful for circular references)
FOREIGN KEY (...) REFERENCES ... DEFERRABLE INITIALLY DEFERRED
Constraints sangat penting untuk data integrity — mereka memberlakukan aturan data di level database (pertahanan terakhir, selalu diberlakukan terlepas dari kode aplikasi), sehingga memahami dukungan constraint PostgreSQL penting untuk merancang database yang robust.
Memahami constraints standar (PRIMARY KEY, FOREIGN KEY dengan referential integrity, UNIQUE, NOT NULL, CHECK, DEFAULT) dan apa yang masing-masing memberlakukan adalah fundamental untuk schema design, memberikan jaminan di level database (keunikan, referensi valid, nilai wajib, data valid) yang melindungi terhadap bugs, race conditions, dan data inconsistent dengan cara yang kode aplikasi saja tidak dapat.
PostgreSQL's CHECK constraints sangat capable, memberlakukan rich business rules termasuk kondisi lintas-kolom (logical consistency seperti end_date > start_date) dan bahkan pola regex — memungkinkan Anda mensencode domain rules langsung dalam schema.
Terutama berharga adalah Postgres-specific EXCLUDE constraint, yang mencegah baris yang berkonflik berdasarkan operator kustom — paling terutama mencegah overlapping time ranges (double-bookings untuk ruangan/resource), capability powerful yang standard UNIQUE constraint tidak dapat sediakan dan yang secara elegan menyelesaikan masalah real-world yang umum (scheduling, reservations) di level database.
Memahami constraints — yang standar untuk integrity, Postgres's fleksibel CHECK expressions, dan powerful EXCLUDE untuk conflict prevention — penting untuk merancang database yang memberlakukan correctness secara otomatis.
Karena data integrity kritis dan constraints memberikan jaminan yang kode aplikasi tidak dapat, dan karena Postgres menawarkan opsi powerful (rich CHECK, EXCLUDE untuk overlaps) di luar basics, memahami dukungan constraint PostgreSQL adalah valuable, practically-relevant knowledge untuk membangun robust database, dengan EXCLUDE constraint khususnya adalah distinctive, useful Postgres capability yang worth knowing untuk scheduling/reservation systems.