A PostgreSQL az megkötések segítségével - táblázatadatokra vonatkozó szabályok - kényszeríti ki az adatintegritást. A standard megkötéseken (, , , , , ) túl a Postgres erőteljes lehetőségeket kínál, mint az megkötések és rugalmas kifejezések.
A PostgreSQL az megkötések segítségével - táblázatadatokra vonatkozó szabályok - kényszeríti ki az adatintegritást. A standard megkötéseken (, , , , , ) túl a Postgres erőteljes lehetőségeket kínál, mint az megkötések és rugalmas kifejezések.
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
A Postgres CHECK megkötések gazdag üzleti szabályokat kényszeríthetnek, beleértve az oszlopok közötti feltételeket és reguláris kifejezési mintákat.
-- 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
Az EXCLUDE megkötések (egy Postgres-specifikus funkció) megelőzik az olyan sorokat, amelyek egy egyéni operátor alapján ütköznek — nevezetesen, megakadályozzák az átfedő időintervallumokat (kettős foglalásokat), amelyeket egy UNIQUE megkötés nem tud megoldani.
-- check constraints at COMMIT instead of immediately (useful for circular references)
FOREIGN KEY (...) REFERENCES ... DEFERRABLE INITIALLY DEFERRED
A megkötések elengedhetetlenek az adatintegritáshoz — adatszintű szabályokat kényszeríthetnek (az utolsó védelmi vonal, amely mindig érvényes, függetlenül az alkalmazáskódtól), ezért a PostgreSQL megkötéseket támogatásának megértése fontos a robusztus adatbázisok tervezéséhez.
A standard megkötések (PRIMARY KEY, FOREIGN KEY referenciális integritással, UNIQUE, NOT NULL, CHECK, DEFAULT) és azok által kényszerített szabályok ismerete alapvető a séma tervezéséhez, és olyan adatbázis-szintű garanciákat biztosít (egyediség, érvényes hivatkozások, szükséges értékek, érvényes adatok), amelyek az alkalmazáskód egyedül nem tudja nyújtani, és amelyek védenek a hibák, versenyhelyzetből adódó problémák és inkonzisztens adatok ellen.
A PostgreSQL CHECK megkötések különösen képesek, gazdag üzleti szabályokat kényszeríthetnek, beleértve az oszlopok közötti feltételeket (logikai konzisztencia, mint az end_date > start_date) és még reguláris kifejezéseket is — lehetővé téve a tartományi szabályok közvetlen kódolását a sémában.
Különösen értékes a Postgres-specifikus EXCLUDE megkötés, amely egyéni operátorok alapján megakadályozza az ütköző sorokat — legfigyelemreméltóbban az átfedő időintervallumok megakadályozása (szobák/erőforrások kettős foglalása), olyan erőteljes képesség, amelyet egy standard UNIQUE megkötés nem tud biztosítani, és amely elegánsan megoldja egy általános valós világbeli problémát (ütemezés, foglalások) az adatbázis szintjén.
A megkötések megértése — a standard megkötések az integritáshoz, a Postgres rugalmas CHECK kifejezéseihez és az ütközések megelőzéséhez szükséges erőteljes EXCLUDE megkötés — fontos az olyan adatbázisok tervezéséhez, amelyek automatikusan kényszerítik ki a helyességet.
Mivel az adatintegritás kritikus, és a megkötések garanciákat nyújtanak, amelyeket az alkalmazáskód nem tud, és mivel a Postgres az alapokon túl erőteljes lehetőségeket kínál (gazdag CHECK, átfedések megelőzésére szolgáló EXCLUDE), a PostgreSQL megkötéseit támogatásának megértése értékes, gyakorlatilag releváns tudás robusztus adatbázisok építéséhez, az EXCLUDE megkötés pedig különösen egy megkülönböztetett, hasznos Postgres képesség, amely érdemes ismerni az ütemezési/foglalási rendszerekhez.