PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Problema di integrità della relazione "uno-a-molti" per intervalli di tempo

E per "timestamp" sembri intendere un certo periodo di tempo .

Un vincolo di esclusione su un tipo di intervallo , combinato con l'uguaglianza su barid (utilizzando il modulo aggiuntivo btree_gist ) sarebbe la soluzione perfetta.

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

Ciò richiede Postgres 9.2 o successivo.

Correlati:

Il manuale ha un esempio di codice corrispondente!