PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

problème d'intégrité de la relation "un-à-plusieurs" pour les plages de temps

Et par "horodatage", vous semblez vouloir dire une certaine période de temps .

Une contrainte d'exclusion sur un type de plage , combiné avec l'égalité sur barid (en utilisant le module supplémentaire btree_gist ) serait la solution parfaite.

CREATE EXTENSION btree_gist;  -- needed once per database

CREATE TABLE foo (
  fooid  serial PRIMARY KEY
, barid  integer NOT NULL REFERENCES bar(barid) 
, bazid  integer NOT NULL REFERENCES baz(bazid)
, time_range tsrange NOT NULL           -- replaces startdate  & enddate 
, EXCLUDE USING gist (barid WITH =, time_range WITH &&)
);

Cela nécessite Postgres 9.2 ou plus tard.

Connexe :

Le manuel contient un exemple de code correspondant !