sam*_*mol 2 postgresql indexing database-design range-types
CREATE TABLE operating_period (
id SERIAL NOT NULL PRIMARY KEY,
during TSTZRANGE NOT NULL,
-- other meta fields
);
Run Code Online (Sandbox Code Playgroud)
要求:1.运营期间不得相互重叠
题:
(start_at, end_at)还是GIST索引快速tstzrange?tstzrange常用吗?或者我最好用两列?1.答案清楚.要确保没有重叠,请使用排除约束:
CREATE TABLE operating_period (
id serial PRIMARY KEY -- PK is NOT NULL automatically
,during tstzrange NOT NULL
,EXCLUDE USING gist (during WITH &&) -- no overlap
);
Run Code Online (Sandbox Code Playgroud)
这是通过GiST索引实现的during,它自动支持多种类型的查询.相关回答:
2.和3.的答案不是很清楚,因为它确实取决于很多事情.两者都有其优点和缺点.对于开放时间,我很可能会使用当前版本的Postgres中的范围类型.我还会[)对所有条目强制执行边界以保持简单.第一个链接答案的详细信息.
如果你应该去(start_at, end_at),你会对OVERLAPS运营商感兴趣:
无论哪种方式,这里的指导方针是每个问题提出一个问题,而不是整个清单......
| 归档时间: |
|
| 查看次数: |
1511 次 |
| 最近记录: |