Maison > base de données > tutoriel mysql > Comment la contrainte EXCLUDE de PostgreSQL peut-elle empêcher les plages de dates/heures qui se chevauchent et qui sont adjacentes ?

Comment la contrainte EXCLUDE de PostgreSQL peut-elle empêcher les plages de dates/heures qui se chevauchent et qui sont adjacentes ?

Susan Sarandon
Libérer: 2025-01-05 09:28:38
original
262 Les gens l'ont consulté

How Can PostgreSQL's EXCLUDE Constraint Prevent Overlapping and Adjacent Date/Time Ranges?

Prévenir la duplication avec les contraintes EXCLUDE dans PostgreSQL

Lors de la création d'une base de données qui stocke des plages de dates/heures arbitraires, il est essentiel d'appliquer des contraintes qui empêchent les entrées qui se chevauchent ou qui sont adjacentes. Ces contraintes sont cruciales pour maintenir l'intégrité et l'exactitude des données.

Dans PostgreSQL, la contrainte EXCLUDE répond à cet objectif en utilisant un index GiST. Cependant, une préoccupation commune se pose concernant l'hypothèse d'une résolution d'une seconde lors de la définition de ces contraintes. Les types de données d'horodatage dans PostgreSQL ont souvent une résolution plus élevée, ce qui peut entraîner des inexactitudes.

Solution utilisant des limites exclusives

Pour résoudre ce problème et éviter les plages superposées et adjacentes, il est Il est recommandé d'appliquer des limites exclusives ('[)') sur les plages de dates/heures. Cela implique d'inclure la limite inférieure (en utilisant 'lower_inc()') et d'exclure la limite supérieure ("PAS upper_inc()') via une contrainte CHECK. De plus, pour exclure les plages adjacentes, une autre contrainte EXCLUDE utilisant l'opérateur '-|-' peut être utilisée.

Exemple de code :

CREATE TABLE tbl (
   tbl_id serial PRIMARY KEY
 , tsr tsrange
 , CONSTRAINT tsr_no_overlap  EXCLUDE USING gist (tsr WITH &&)
 , CONSTRAINT tsr_no_adjacent EXCLUDE USING gist (tsr WITH -|-)
 , CONSTRAINT tsr_enforce_bounds CHECK (lower_inc(tsr) AND NOT upper_inc(tsr))
);
Copier après la connexion

Cette solution garantit que seules les plages avec des limites exclusives sont autorisées, empêchant ainsi les entrées qui se chevauchent et celles qui sont adjacentes. Il garantit également l'intégrité des données en appliquant le comportement de plage souhaité.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal