PostgreSQL applique l'intégrité des données par le biais de — des règles sur les données de table. Au-delà des contraintes standards (, , , , , ), Postgres ajoute des options puissantes comme les contraintes et les expressions flexibles.
PostgreSQL applique l'intégrité des données par le biais de — des règles sur les données de table. Au-delà des contraintes standards (, , , , , ), Postgres ajoute des options puissantes comme les contraintes et les expressions flexibles.
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
Les contraintes CHECK de Postgres peuvent appliquer des règles métier riches, y compris des conditions multi-colonnes et des motifs regex.
-- 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
Les contraintes EXCLUDE (une fonctionnalité spécifique à Postgres) empêchent les lignes qui entrent en conflit selon un opérateur personnalisé — notamment, empêcher les plages de temps chevauchantes (double-réservations), ce qu'une contrainte UNIQUE ne peut pas faire.
-- check constraints at COMMIT instead of immediately (useful for circular references)
FOREIGN KEY (...) REFERENCES ... DEFERRABLE INITIALLY DEFERRED
Les contraintes sont essentielles pour l'intégrité des données — elles appliquent les règles de données au niveau de la base de données (la dernière ligne de défense, toujours appliquée indépendamment du code applicatif), donc comprendre le support des contraintes de PostgreSQL est important pour concevoir des bases de données robustes.
Connaître les contraintes standard (PRIMARY KEY, FOREIGN KEY avec intégrité référentielle, UNIQUE, NOT NULL, CHECK, DEFAULT) et ce que chacune applique est fondamental pour la conception de schéma, fournissant des garanties au niveau de la base de données (unicité, références valides, valeurs requises, données valides) qui protègent contre les bugs, les conditions de concurrence et les données incohérentes d'une manière que le code applicatif seul ne peut pas.
Les contraintes CHECK de PostgreSQL sont particulièrement capables, appliquant des règles métier riches y compris des conditions multi-colonnes (cohérence logique comme end_date > start_date) et même des motifs regex — vous permettant d'encoder les règles métier directement dans le schéma.
Particulièrement précieuse est la contrainte EXCLUDE spécifique à Postgres, qui empêche les lignes conflictuelles par opérateurs personnalisés — notamment empêcher les plages de temps chevauchantes (double-réservations pour une salle/ressource), une capacité puissante qu'une contrainte UNIQUE standard ne peut pas fournir et qui résout élégamment un problème courant dans le monde réel (planification, réservations) au niveau de la base de données.
Comprendre les contraintes — les contraintes standard pour l'intégrité, les expressions CHECK flexibles de Postgres et l'EXCLUDE puissante pour la prévention des conflits — est important pour concevoir des bases de données qui appliquent la correction automatiquement.
Comme l'intégrité des données est critique et que les contraintes fournissent des garanties que le code applicatif ne peut pas, et puisque Postgres offre des options puissantes (CHECK riche, EXCLUDE pour les chevauchements) au-delà des bases, comprendre le support des contraintes de PostgreSQL est une connaissance pratique et pertinente pour construire des bases de données robustes, la contrainte EXCLUDE en particulier étant une capacité distinctive et utile de Postgres qui vaut la peine d'être connue pour les systèmes de planification/réservation.