PostgreSQL menguatkuasakan integriti data melalui — peraturan pada data jadual. Selain daripada yang standard (, , , , , ), Postgres menambah pilihan berkuasa seperti constraint dan ungkapan yang fleksibel.
PostgreSQL menguatkuasakan integriti data melalui — peraturan pada data jadual. Selain daripada yang standard (, , , , , ), Postgres menambah pilihan berkuasa seperti constraint dan ungkapan yang fleksibel.
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
Constraint CHECK Postgres boleh menguatkuasakan peraturan perniagaan yang kaya, termasuk syarat merentas lajur dan corak 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
Constraint EXCLUDE (ciri khusus Postgres) menghalang baris yang berkonflik mengikut operator tersuai — yang terkenal, menghalang julat masa yang bertindih (tempahan berganda), yang tidak boleh dilakukan oleh constraint UNIQUE.
-- check constraints at COMMIT instead of immediately (useful for circular references)
FOREIGN KEY (...) REFERENCES ... DEFERRABLE INITIALLY DEFERRED
Constraint adalah penting untuk integriti data — ia menguatkuasakan peraturan data pada peringkat pangkalan data (barisan pertahanan terakhir, sentiasa dikuatkuasakan tanpa mengira kod aplikasi), jadi memahami sokongan constraint PostgreSQL adalah penting untuk mereka bentuk pangkalan data yang teguh.
Mengetahui constraint standard (PRIMARY KEY, FOREIGN KEY dengan integriti rujukan, UNIQUE, NOT NULL, CHECK, DEFAULT) dan apa yang dikuatkuasakan oleh setiap satu adalah asas kepada reka bentuk skema, menyediakan jaminan peringkat pangkalan data (keunikan, rujukan yang sah, nilai yang diperlukan, data yang sah) yang melindungi daripada pepijat, keadaan perlumbaan (race condition), dan data tidak konsisten dengan cara yang tidak mampu dilakukan oleh kod aplikasi sahaja.
Constraint CHECK PostgreSQL amat berkemampuan, menguatkuasakan peraturan perniagaan yang kaya termasuk syarat merentas lajur (kekonsistenan logikal seperti end_date > start_date) dan juga corak regex — membolehkan anda mengekod peraturan domain terus dalam skema.
Yang amat berharga ialah constraint EXCLUDE khusus Postgres, yang menghalang baris berkonflik mengikut operator tersuai — yang paling ketara menghalang julat masa yang bertindih (tempahan berganda untuk bilik/sumber), satu keupayaan berkuasa yang tidak boleh disediakan oleh constraint UNIQUE standard dan yang menyelesaikan dengan elegan masalah dunia sebenar yang biasa (penjadualan, tempahan) pada peringkat pangkalan data.
Memahami constraint — yang standard untuk integriti, ungkapan CHECK Postgres yang fleksibel, dan EXCLUDE yang berkuasa untuk pencegahan konflik — adalah penting untuk mereka bentuk pangkalan data yang menguatkuasakan ketepatan secara automatik.
Memandangkan integriti data adalah kritikal dan constraint menyediakan jaminan yang tidak mampu disediakan oleh kod aplikasi, dan memandangkan Postgres menawarkan pilihan berkuasa (CHECK yang kaya, EXCLUDE untuk pertindihan) melebihi asas, memahami sokongan constraint PostgreSQL ialah pengetahuan yang berharga dan relevan secara praktikal untuk membina pangkalan data yang teguh, dengan constraint EXCLUDE khususnya menjadi keupayaan Postgres yang tersendiri dan berguna yang patut diketahui untuk sistem penjadualan/tempahan.