You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL办公工位预订系统特定状态多列唯一约束实现

PostgreSQL 工位预订表的条件唯一约束实现

你有一张用于办公工位预订系统的PostgreSQL表,表结构及示例数据如下:

IDBooked_DateSeat_IDEmployee_IDStatus
12022-07-0810Cid1booked
22022-07-0820Cid2cancelled

需求是:确保同一日期、同一工位最多只能被一位员工预订(即status为booked的记录),同时允许保留取消预订的记录(status改为cancelled)。


解决方案:使用部分唯一索引

普通的多列唯一约束无法针对特定状态生效,PostgreSQL提供的**部分唯一索引(Partial Unique Index)**正好能解决这个问题,它只对满足指定条件的行施加唯一约束。

执行以下SQL语句创建索引(记得替换your_table_name为你的实际表名):

CREATE UNIQUE INDEX idx_unique_booked_seat
ON your_table_name (booked_date, seat_id)
WHERE status = 'booked';

效果说明

  • 当尝试插入或更新出**同一booked_date、同一seat_id且status为booked**的第二条记录时,PostgreSQL会抛出唯一约束冲突错误,阻止操作。
  • 状态为cancelled的记录不受此约束,同一日期和工位下可以存在多条取消记录,也可以和已预订的记录共存。
  • 当某条预订记录被修改为cancelled后,该日期和工位可以再次被预订(插入新的booked状态记录)。

内容的提问来源于stack exchange,提问作者Akhmad Zaki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 12:40:53