sql >> Base de Datos >  >> RDS >> PostgreSQL

Problema de integridad de relación 'uno a muchos' para rangos de tiempo

Y por "marca de tiempo" parece que te refieres a un cierto período de tiempo .

Una restricción de exclusión en un tipo de rango , combinado con igualdad en barid (usando el módulo adicional btree_gist ) sería la solución perfecta.

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 &&)
);

Esto requiere Postgres 9.2 o posterior.

Relacionado:

¡El manual tiene un ejemplo de código coincidente!