我们正在尝试建立资源预订系统,用户可以预订系统中的位置或人员。多个用户可以针对相同的时间对相同的资源进行多次预订。
例如, 用户A,B和C正在尝试按下列时间预订位置A.
用户A
=> 17/03/2015 10:00至12:00
=> 17/03/2015 14:00至15:00
=> 18/03/2015 10:00至12:00
=> 18/03/2015 14:00至15:00
用户B
=> 17/03/2015 11:00至12:00
=> 18/03/2015 10:00至12:00
用户C
=> 17/03/2015 11:30至13:30
系统需要处理资源冲突,以避免在相同的时间或重叠时间进行双重预订。只有一个用户可以获取资源,其余的预订必须失败。我的问题是处理它的正确方法是什么?我们应该在将数据插入表之前使用事务或表锁吗?我们正在使用Visual Studio 2008和SQL Server 2008.非常感谢您的建议,我们非常感谢。
答案 0 :(得分:2)
此处涉及至少2个业务流程。
显示可用座位。
预订位置。
由于这些过程并不是无关紧要的,因为2个人可能会选择相同的Location-A,因此会出现并发问题。
如果您的数据库设计指定了正确的唯一性约束,那么组合:
-LocationID
-TimeStamp(例如10至12,15至17)
是唯一的,然后数据库将防止重复。
以下情况也是可能的,但将通过上述建议实施来处理:
假设可以显示给定影院和给定事件的网格视图:
所以你需要做的就是没有更正确的数据库设计和适当的约束选择。
如果您愿意,可以使用其他更复杂的方法,使用事务队列。在这种情况下,请求首先写入队列,然后每n秒触发一个进程,但在您的情况下这几乎不必要或不实用。
真正有趣的部分是用户1的列表网格应该显示什么?