2014-10-23 2 views
2
CREATE TABLE operating_period (
    id SERIAL NOT NULL PRIMARY KEY, 
    during TSTZRANGE NOT NULL, 
    -- other meta fields 
); 

요구 사항에 대한 지속적인 타임 스탬프 범위 (tstzrange) : 없음 운영 기간이 서로비 중복, 영업 시간

질문과 중복 할 수 없다 1. :

  1. 가 어떻게 제약 조건을 추가하려면 영업 시간에 겹침이 없도록하려면?
  2. 쿼리 속도면에서 두 열 (start_at, end_at)을 사용하거나 GIST 인덱스가 tstzrange 일 때 더 빠릅니까?
  3. 스키마 디자인에서 일반적으로 tstzrange이 사용됩니까? 아니면 두 개의 기둥으로 더 좋을까요?

답변

5

1에 대한 대답은 분명합니다.. 확인하려면 더 중복 사용하지 않는이 발생하는 exclusion constraint :

CREATE TABLE operating_period (
    id serial PRIMARY KEY    -- PK is NOT NULL automatically 
,during tstzrange NOT NULL 
,EXCLUDE USING gist (during WITH &&) -- no overlap 
); 

이 자동으로 쿼리의 여러 유형을 지원 during에 GIST 지수로 구현됩니다. 관련 답변 : 정말 많은 것들에 의존하기 때문에 2. 3.

답변은 명확하지 않다. 둘 다 장단점이 있습니다. 영업 시간 동안 나는 현재 버전의 Postgres에서 범위 유형을 사용할 가능성이 높습니다. 또한 모든 항목에 대해 [) 경계를 적용하여 단순하게 유지할 것입니다. first linked answer의 세부 정보

어쨌든, 여기에 가이드 라인이 를 요청하는 것입니다 : 당신이 (start_at, end_at)로 이동해야하는 경우

, 당신은 OVERLAPS 운영자에 관심이있을 것 전체 목록이 아닌 개의 질문 중 하나의 질문 ...

관련 문제