PostgreSQL zagotavlja celovitost podatkov preko omejitev — pravil za podatke v tabeli. Poleg standardnih omejitev (, , , , , ) PostgreSQL dodaja zmogljive možnosti, kot so omejitve in fleksibilni izrazi.
PostgreSQL zagotavlja celovitost podatkov preko omejitev — pravil za podatke v tabeli. Poleg standardnih omejitev (, , , , , ) PostgreSQL dodaja zmogljive možnosti, kot so omejitve in fleksibilni izrazi.
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
PostgreSQL CHECK omejitve lahko uveljavijo bogata poslovna pravila, vključno s pogoji med stolpci in regularnimi izrazi.
-- 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 omejitve (funkcionalnost specifična za PostgreSQL) preprečijo vrstice, ki se konfliktirajo po poljubnem operatorju — najbolj znano je preprečevanje prekrivajočih se časovnih razponov (dvojnih rezervacij), kar UNIQUE omejitev ne zmore.
-- check constraints at COMMIT instead of immediately (useful for circular references)
FOREIGN KEY (...) REFERENCES ... DEFERRABLE INITIALLY DEFERRED
Omejitve so bistvene za celovitost podatkov — uveljavijo pravila za podatke na ravni podatkovne baze (zadnja linija obrambe, vedno uveljavljena ne glede na kodo aplikacije), zato je razumevanje PostgreSQL podpore za omejitve pomembno za oblikovanje robustnih baz podatkov.
Poznavati standardne omejitve (PRIMARY KEY, FOREIGN KEY z referencialno celovitostjo, UNIQUE, NOT NULL, CHECK, DEFAULT) in kaj vsaka uveljavlja, je temeljno za oblikovanje shem in zagotavlja jamstva na ravni podatkovne baze (edinstvenost, veljavne reference, obvezne vrednosti, veljavni podatki), ki varujejo pred napakami, race pogoji in neskonsistentnimi podatki na način, ki ga samo koda aplikacije ne more zagotoviti.
PostgreSQL CHECK omejitve so še posebej zmogljive, uveljavijo bogata poslovna pravila, vključno s pogoji med stolpci (logična konsistentnost, kot je end_date > start_date) in celo regularnimi izrazi — omogočajo vam, da direktno v shemo zakodiraate domensko pravila.
Posebej dragocena je EXCLUDE omejitev, specifična za PostgreSQL, ki preprečuje konfliktne vrstice z uporabo poljubnih operatorjev — najbolj znano je preprečevanje prekrivajočih se časovnih razponov (dvojnih rezervacij za prostor/vir), zmogljiva funkcionalnost, ki je standardna UNIQUE omejitev ne more zagotoviti in ki elegantno rešuje pogost problem v realnem svetu (razporeditev, rezervacije) na ravni podatkovne baze.
Razumevanje omejitev — standardnih za celovitost, fleksibilnih PostgreSQL CHECK izrazov in zmogljive EXCLUDE za preprečevanje konfliktov — je pomembno za oblikovanje baz podatkov, ki avtomatsko uveljavijo pravilnost.
Ker je celovitost podatkov kritična in omejitve zagotavljajo jamstva, ki jih koda aplikacije ne more, in ker PostgreSQL ponuja zmogljive možnosti (bogat CHECK, EXCLUDE za prekrivanja) izven osnov, je razumevanje PostgreSQL podpore za omejitve dragoceno, praktično relevantno znanje za gradnjo robustnih baz podatkov, pri čemer je EXCLUDE omejitev še posebej distintivna, koristna PostgreSQL zmogljivost, ki je vredno poznati za sisteme razporeditve in rezervacij.