PostgreSQL upprätthåller dataintegritet genom begränsningar — regler för tabelldata. Bortom de standardiserade (, , , , , ), lägger Postgres till kraftfulla alternativ som -begränsningar och flexibla -uttryck.
PostgreSQL upprätthåller dataintegritet genom begränsningar — regler för tabelldata. Bortom de standardiserade (, , , , , ), lägger Postgres till kraftfulla alternativ som -begränsningar och flexibla -uttryck.
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-begränsningar kan upprätthålla rika affärsregler, inklusive villkor mellan kolumner och regex-mönster.
-- 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-begränsningar (en PostgreSQL-specifik funktion) förhindrar rader som står i konflikt enligt en anpassad operator — framför allt, förhindra överlappande tidsintervall (dubbelbokning), vilket en UNIQUE-begränsning inte kan göra.
-- check constraints at COMMIT instead of immediately (useful for circular references)
FOREIGN KEY (...) REFERENCES ... DEFERRABLE INITIALLY DEFERRED
Begränsningar är väsentliga för dataintegritet — de upprätthåller dataregler på databasnivå (det sista försvarslaget, alltid upprätthållet oavsett programkod), så att förstå PostgreSQLs begränsningsstöd är viktigt för att designa robusta databaser.
Att känna till standardbegränsningarna (PRIMARY KEY, FOREIGN KEY med referensintegritet, UNIQUE, NOT NULL, CHECK, DEFAULT) och vad var och en upprätthåller är grundläggande för schemadesign, vilket ger databasnivågarantier (unikhet, giltiga referenser, obligatoriska värden, giltiga data) som skyddar mot buggar, race conditions och inkonsistent data på sätt som enbart programkod inte kan.
PostgreSQLs CHECK-begränsningar är särskilt kraftfulla och upprätthåller rika affärsregler inklusive villkor mellan kolumner (logisk konsekvens som end_date > start_date) och även regex-mönster — vilket låter dig kodifiiera domänregler direkt i schemat.
Speciellt värdefull är den PostgreSQL-specifika EXCLUDE-begränsningen, som förhindrar konfliktande rader enligt anpassade operatorer — framför allt förhindra överlappande tidsintervall (dubbelbokning för ett rum/en resurs), en kraftfull möjlighet som en standard UNIQUE-begränsning inte kan tillhandahålla och som elegant löser ett vanligt verkligt problem (schemaläggning, reservationer) på databasnivå.
Att förstå begränsningarna — standarddefinitionerna för integritet, Postgress flexibla CHECK-uttryck och den kraftfulla EXCLUDE för konfliktförebyggelse — är viktigt för att designa databaser som upprätthåller riktighet automatiskt.
Eftersom dataintegritet är kritisk och begränsningar ger garantier som programkod inte kan, och eftersom Postgres erbjuder kraftfulla alternativ (rika CHECK, EXCLUDE för överlapp) bortom grunderna, är förståelse för PostgreSQLs begränsningsstöd värdefull, praktiskt relevant kunskap för att bygga robusta databaser, där EXCLUDE-begränsningen i synnerhet är en distinkt, användbar PostgreSQL-funktion värd att känna till för schemaläggnings-/reservationssystem.