这类似于另一个问题,但并不完全相同 .
我的目标是设计一个电影预订系统 . 用户可以点击一个或多个空座位以获得电影时间表以保留它们 . 但他需要在15分钟之前付款,否则预留的座位必须为其他用户放弃 .
我有以下伪MySQL:
表电影:
id int primary key,
name varchar,
.....
表MovieSched:
movie_id foreign key refers to Movie,
sched_id int primary key,
showtime datetime, // date and time of schedule
count_signup int, // number of sign ups
max_size int // max number of seats
表MovieSchedSignUp:
sched_id foreign key refers to MovieSched,
user_id foreign key refers to User,
signup datetime // datetime of signup
每个电影时间表都有 max_size 可以注册的用户 . 要注册用户,我在MovieSchedSignUp中插入一行,其中包含当前日期和时间 .
这些要求自然会产生一些限制:
由于界面和数据库之间可能存在不一致,当A试图预留座位时,我需要在没有足够座位时通知用户A. (例如,另一个用户B可以在A之前购买所有座位)
我需要 atomically 在MovieSchedSignUp中插入一行,同时确保计划不是"overbooked"( count_signup <= max_size )以及同时更新 count_signup .
我需要确保在15分钟内付款,否则必须释放预留座位 .
我的想法是:
在MovieSchedSignUp中添加额外的列以跟踪付款的时间 .
使用交易, but how do I return information about whether there are enough seats or not ?
在后台运行批处理作业以删除MovieSchedSignUp中的“已过期”行 .
这样做最有效的方法是什么?还有其他想法吗?不是真的想要使用批处理作业,但还有其他方法吗?