PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

'One-to-Many'-Beziehungsintegritätsproblem für Zeitbereiche

Und mit "Zeitstempel" meinen Sie anscheinend einen bestimmten Zeitraum .

Eine Ausschlussbeschränkung auf einem Bereichstyp , kombiniert mit Gleichheit bei barid (unter Verwendung des zusätzlichen Moduls btree_gist ) wäre die perfekte Lösung.

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

Dies erfordert Postgres 9.2 oder später.

Verwandte:

Das Handbuch enthält ein passendes Codebeispiel!