Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 如何防止覆盖共享约会簿中的记录?_Database_Postgresql - Fatal编程技术网

Database 如何防止覆盖共享约会簿中的记录?

Database 如何防止覆盖共享约会簿中的记录?,database,postgresql,Database,Postgresql,PostgreSQL 9.3 我正在写一本标准的预约书。这本书每15:00分钟将有三列,并且将有多个客户端从不同的位置同时向其写入内容 如果两个用户A和B同时进行约会,如何防止用户B覆盖用户A的约会?(即,一旦用户A 写了一个约会,用户B的信息将过期——在他试图保存约会记录之前,他不知道用户A做了什么)。如果用户B想要使用的预约时间已经分配,我希望通知用户B该预约时间不可用,并且不要覆盖用户A 我确信这是一个基本的、常见的问题,但我不能对此掉以轻心 感谢您的帮助、建议或参考。如果您将约会存储为

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分钟或其他时间的未确认预订。当用户单击“确认”时,您会检查初始预订是否仍然存在,如果没有,请通知用户。