PostgreSQL jenfasizza l-integrità tad-data permezz ta' constraints — regoli fuq id-data tal-tabella. Bħala supplement għal dawk standard (PRIMARY KEY, FOREIGN KEY, UNIQUE, NOT NULL, CHECK, DEFAULT), Postgres iżid għażliet qawwija bħal EXCLUDE constraints u espressjonijiet CHECK flessibili.
Il-constraints standard
CREATE 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 constraints — jenfasizzaw regoli tad-dominju
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 jistgħu jenfasizzaw regoli ta' negozju riċċi, inklużi kundizzjonijiet bejn kollegamenti u patterns regex.
EXCLUDE constraints — feature qawwija ta' Postgres
-- 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 (feature speċifika ta' Postgres) jipprevjenu rriggel li jkonflittaw bi operator personalizzat — b'mod famuż, jipprevjenu overlapping time ranges (doppja-prenota), li UNIQUE constraint ma jistax jagħmel.
Deferrable constraints
-- check constraints at COMMIT instead of immediately (useful for circular references)
FOREIGN KEY (...) REFERENCES ... DEFERRABLE INITIALLY DEFERRED
Għaliex hija importanti
Li Constraints huma essenzjali għall-integrità tad-data — huma jenfasizzaw regoli tad-data bil-livell tad-database (l-aħħar linja ta' difiża, dejjem enfasizzata irrispettivament mill-kodiċi tal-applikazzjoni), għalhekk il-fehim tas-supp tal-constraints ta' PostgreSQL huwa importanti għad-disinn ta' databases robust.
/// Tif-standard constraints (PRIMARY KEY, FOREIGN KEY bi referential integrity, UNIQUE, NOT NULL, CHECK, DEFAULT) u xiex kull wieħed jenfasizza huwa fundamentali għad-disinn ta' skema, li jipprovdi garanziji bil-livell tad-database (unicitajt, referenzi validi, valuri meħtieġa, data valida) li jipproteġu kontra bugs, race conditions, u data inkonsistenti b'modi li l-kodiċi tal-applikazzjoni waħdu ma jistax.
Li PostgreSQL's CHECK constraints huma partikolarment kapabbli, jenfasizzaw regoli ta' negozju riċċi inklużi kundizzjonijiet bejn kollegamenti (konsistenza loġika bħall end_date > start_date) u ankaż patterns regex — nillowk tikkodifika regoli ta' dominju direttament fl-iskema.
Partikolarment valurożu huwa l-Postgres-speċifiku EXCLUDE constraint, li jipprevjenu rriggel li jkonflittaw bi operators personalizzati — l-iktar notevolment jipprevjenu overlapping time ranges (doppja-prenota għal kamra/risorsa), kapaċità qawwija li UNIQUE constraint standard ma jistax jipprovdi u li b'għamira tissolvi problema komuni reali (iskjedular, prenotazzjonijiet) bil-livell tad-database.
It-tif tal-constraints — dawk standard għall-integrità, l-espressjonijiet CHECK flessibili ta' Postgres, u l-EXCLUDE qawwija għall-prevenzjoni ta' konflitti — huwa importanti għad-disinn ta' databases li jenfasizzaw korrettezza awtomatikament.
Billi l-integrità tad-data hija kritika u constraints jipprovdu garanziji li l-kodiċi tal-applikazzjoni ma jistax, u billi Postgres joffri għażliet qawwija (CHECK riċċa, EXCLUDE għal overlaps) bħala supplement għab-bażi, it-tif tas-supp tal-constraints ta' PostgreSQL huwa għaruf valurożu, rilevanti praktikament għall-bini ta' databases robust, bil-EXCLUDE constraint partikolarment billi tkun kapaċità distinta, utli ta' Postgres li tafux li tafu għas-sistemi ta' iskjejdular/prenotazzjonijiet.
