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!