sql >> Databasteknik >  >> RDS >> PostgreSQL

'en-till-många' relationsintegritetsfråga för tidsintervall

Och med "tidsstämpel" verkar du mena en viss tidsperiod .

En uteslutningsrestriktion på en intervalltyp , kombinerat med likhet på barid (använder tilläggsmodulen btree_gist ) skulle vara den perfekta lösningen.

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

Detta kräver Postgres 9.2 eller senare.

Relaterat:

Handboken har ett matchande kodexempel!



  1. Varför visas inte min bild?

  2. Mysql anpassad ordning efter och alfabetisk ordning efter:

  3. Kolumnnamn och/eller tabellnamn som parametrar

  4. varför fungerar min nod-app i ett ögonblick och kraschar (heroku)?