所以我正在做一个预订系统,我有下表的预订。
CREATE TABLE reservations (
user_id INT REFERENCES users (id),
booth_number INT REFERENCES booths (booth_number),
starts DATE NOT NULL,
ends DATE NOT NULL,
PRIMARY KEY (user_id, booth_number)
);
我想知道是否有可能在数据库级别设置一个限制,不允许在同一个展位上插入重叠的预订?
例如
INSERT INTO reservations( user_id, booth_number, starts, ends)
VALUES
(1, 0, CURRENT_DATE, CURRENT_DATE + 7),
(2, 0, CURRENT_DATE + 4, CURRENT_DATE + 9),
1条答案
按热度按时间zazmityj1#
几乎确切的场景(房间而不是展位)在文档中:
https://www.postgresql.org/docs/current/rangetypes.html#rangetypes-约束
“您可以使用btree\u gist扩展来定义纯标量数据类型的排除约束,然后可以将其与范围排除结合起来,以获得最大的灵活性。例如,安装btree\u gist后,仅当会议室数相等时,以下约束才会拒绝重叠范围:
要修改以供您使用,请执行以下操作: