PostgreSQL 9.3
我正在写一本标准的预约簿。该书每15:00分钟有三列,并有多个客户同时从不同的位置写入。
如果两个用户A和B同时进行预约,我该如何阻止用户B覆盖用户A的预约? (也就是说,一旦用户A拥有 在预约时,用户B的信息将会过时 - 在他试图保存约会记录之前,他不会知道用户A做了什么。如果已经分配了用户B想要使用的约会时间,我希望通知用户B它不可用并且不会覆盖用户A.
我确信这是一个基本而常见的问题,但我无法绕过它。
感谢您提供任何帮助,建议或参考。
答案 0 :(得分:1)
如果您存储约会,例如
id,customer_id,时间
1,32,2016-03-10 10:15:00
...
只需在时间列上添加唯一索引即可。然后,如果您尝试同时插入行,则会出现错误。如果您希望同时允许超过1个预订,则可以添加time_slot列并将其包含在索引中。
id,customer_id,time,time_slot
1,32,2016-03-10 10:15:00,1
2,15,2016-03-10 10:15:00,2
create unique index appointments_time_timeslot_idx on appointments (time, time_slot);