这类似于另一个问题,但不完全相同。
我的目标是设计一个电影预订系统。用户可以点击电影时间表的一个或多个空座位来预订它们。但他需要在 15 分钟前付款,否则预留的座位将不得不自动让给其他用户。
我有以下伪 MySQL:
表电影:
id int primary key,
name varchar,
.....
表电影时间表:
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
<=max_size
)以及同时更新count_signup
。我需要确保在 15 分钟内付款,否则必须腾出预留座位。
我的想法是:
在 MovieSchedSignUp 中有额外的列来跟踪付款时间。
使用事务,但我如何返回有关是否有足够席位的信息?
在后台运行批处理作业以删除 MovieSchedSignUp 中的“过期”行。
这样做最有效的方法是什么?还有其他想法吗?真的不想使用批处理作业,但是还有其他出路吗?