所以这就是我要做的事情:
我有很多活动,每个活动代表一个日期时间范围(如07.03.2014 06:00 - 07.03.2014 08:00)
事件与hall_schedule
相关联(一对多)。
然后我想搜索没有涵盖某个特定时间范围的事件的所有hall_schedule's
,例如:
“我想要所有hall_schedules,其中大厅活动不包括07.03.2014 06:00 - 07.03.2014 08:00范围”
所以问题是,为了获得最佳性能,我该如何设计呢?存储事件以及稍后进行所述搜索的最佳方法是什么?
我很乐意使用特定于postgresql(9.3)的内容,无论哪种方式都能提供最佳性能
答案 0 :(得分:3)
TIMESTAMP WITH TIME ZONE
用于hall_schedule
的{{1}}和start
时间点使用tstzrange
来检测overlappings,例如:
end
注意:
SELECT *
FROM "hall_schedule"
WHERE NOT (tstzrange("start", "end", '[]') &&
tstzrange(:input_start, :input_end, '[]'))
表格的tstzrange
列中,但是从应用程序编辑起来比较困难(您必须在任何地方提供其文本表示)EXCLUDE
constraints,以防止hall_schedule
中的事件相互重叠,如果您愿意的话。更新
此外,为了加快查询速度,您还可以添加以下索引:
hall_schedule