PostgreSQL handhaaft data-integriteit via constraints — regels op tabelgegevens. Naast de standaard constraints (, , , , , ) biedt Postgres krachtige opties zoals constraints en flexibele expressies.
PostgreSQL handhaaft data-integriteit via constraints — regels op tabelgegevens. Naast de standaard constraints (, , , , , ) biedt Postgres krachtige opties zoals constraints en flexibele expressies.
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 constraints kunnen rijke bedrijfsregels afdwingen, inclusief voorwaarden over meerdere kolommen en regex-patronen.
-- 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 (een PostgreSQL-specifieke functie) voorkomen rijen die conflicteren volgens een aangepaste operator — met name het voorkomen van overlappende tijdsbereiken (dubbele boekingen), wat een UNIQUE constraint niet kan.
-- check constraints at COMMIT instead of immediately (useful for circular references)
FOREIGN KEY (...) REFERENCES ... DEFERRABLE INITIALLY DEFERRED
Constraints zijn essentieel voor data-integriteit — zij dwingen gegevensregels op databaseniveau af (de laatste verdedigingslinie, altijd afgedwongen ongeacht toepassingscode), dus het begrijpen van PostgreSQL's constraint-ondersteuning is belangrijk voor het ontwerpen van robuuste databases.
De standaard constraints (PRIMARY KEY, FOREIGN KEY met referentiële integriteit, UNIQUE, NOT NULL, CHECK, DEFAULT) en wat elk afdwingt kennen is fundamenteel voor schemaontwerp, omdat het databaseniveau-garanties biedt (uniekheid, geldige referenties, vereiste waarden, geldige gegevens) die tegen bugs, race conditions en inconsistente gegevens beschermen op manieren waarop toepassingscode alleen niet kan.
De CHECK constraints van PostgreSQL zijn bijzonder capabel en dwingen rijke bedrijfsregels af, inclusief voorwaarden over meerdere kolommen (logische consistentie zoals end_date > start_date) en zelfs regex-patronen — zodat u domeinregels rechtstreeks in het schema kunt coderen.
Bijzonder waardevol is de PostgreSQL-specifieke EXCLUDE constraint, die conflicterende rijen voorkomt via aangepaste operators — met name het voorkomen van overlappende tijdsbereiken (dubbele boekingen voor een ruimte/resource), een krachtige mogelijkheid die een standaard UNIQUE constraint niet kan bieden en die elegant een veel voorkomend praktijkprobleem (planning, reserveringen) op databaseniveau oplost.
De constraints begrijpen — de standaard constraints voor integriteit, de flexibele CHECK-expressies van Postgres en de krachtige EXCLUDE voor conflictpreventie — is belangrijk voor het ontwerpen van databases die automatisch correctheid afdwingen.
Omdat data-integriteit kritisch is en constraints garanties bieden die toepassingscode niet kan geven, en omdat Postgres krachtige opties biedt (rijke CHECK, EXCLUDE voor overlaps) voorbij de basis, is het begrijpen van PostgreSQL's constraint-ondersteuning waardevol, praktisch relevant kennis voor het bouwen van robuuste databases, waarbij de EXCLUDE constraint in het bijzonder een onderscheidende, nuttige PostgreSQL-mogelijkheid is die het waard is om te kennen voor scheduling/reserveringssystemen.