Database 如何防止覆盖共享约会簿中的记录?
PostgreSQL 9.3 我正在写一本标准的预约书。这本书每15:00分钟将有三列,并且将有多个客户端从不同的位置同时向其写入内容 如果两个用户A和B同时进行约会,如何防止用户B覆盖用户A的约会?(即,一旦用户A 写了一个约会,用户B的信息将过期——在他试图保存约会记录之前,他不知道用户A做了什么)。如果用户B想要使用的预约时间已经分配,我希望通知用户B该预约时间不可用,并且不要覆盖用户A 我确信这是一个基本的、常见的问题,但我不能对此掉以轻心Database 如何防止覆盖共享约会簿中的记录?,database,postgresql,Database,Postgresql,PostgreSQL 9.3 我正在写一本标准的预约书。这本书每15:00分钟将有三列,并且将有多个客户端从不同的位置同时向其写入内容 如果两个用户A和B同时进行约会,如何防止用户B覆盖用户A的约会?(即,一旦用户A 写了一个约会,用户B的信息将过期——在他试图保存约会记录之前,他不知道用户A做了什么)。如果用户B想要使用的预约时间已经分配,我希望通知用户B该预约时间不可用,并且不要覆盖用户A 我确信这是一个基本的、常见的问题,但我不能对此掉以轻心 感谢您的帮助、建议或参考。如果您将约会存储为
感谢您的帮助、建议或参考。如果您将约会存储为 id、客户id、时间
2016年3月13日10:15:00
只需在时间列上添加一个唯一索引。如果您尝试在同一时间插入一行,则会出现错误。如果您想同时允许多个预订,可以添加一个时间段列并将其包含在索引中 id、客户id、时间、时隙
2016-03-10:15:00,1
2016年3月15日10:15:00
create unique index appointments_time_timeslot_idx on appointments (time, time_slot);
此外,您最好只存储实际约会,而不是每15分钟存储一次interval@NeilMcGuigan+1用于定义实际问题。:)@经过深思熟虑,我得出了同样的结论。在我的例子中,另一个问题是,实际的保存是通过一个默认为乐观并发的实体框架执行的。在两者之间进行管理有点棘手。:)你确定你需要锁吗?如果你想预定预约时间,你可以通过设置“确认”栏来解决。然后,您可以在用户选择时间后立即插入一行,并在用户确认时将确认标志更新为true。例如,您可以进行清理作业,以删除旧的未确认预订。这是一个有趣的想法……但我不确定清理工作最终是否会回到“已确认”上的初始问题专栏??不确定您认为问题出在哪里。清理作业可能会删除超过15分钟或其他时间的未确认预订。当用户单击“确认”时,您会检查初始预订是否仍然存在,如果没有,请通知用户。