这类似于另一个问题,但并不完全相同。
我的目标是设计一个电影预订系统。用户可以点击一个或多个空座位以获得电影时间表以保留它们。但是他需要在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之前购买所有座位。)
我需要 原子地 在MovieSchedSignUp中插入一行,同时确保计划不会“超量预订”(count_signup
< = {{1 }}以及同时更新max_size
。
我需要确保在15分钟内付款,否则必须释放预订座位。
我的想法是:
在MovieSchedSignUp中添加额外的列以跟踪付款的时间。
使用交易 ,但如何返回有关座位是否足够的信息 ?
在后台运行批处理作业以删除MovieSchedSignUp中的“已过期”行。
最有效的方法是什么?还有其他想法吗?不是真的想要使用批处理作业,但还有其他方法吗?
答案 0 :(得分:0)
我认为在这种情况下你将不得不使用交易。