这类似于另一个问题,但不完全相同。
我的目的是设计电影预定系统。用户可以单击一个或多个空座位以观看电影时间表以保留它们。但是他需要在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
max_size),同时还要更新count_signup
。我需要确保15分钟内付款,否则必须释放保留的席位。
我的想法是:
在MovieSchedSignUp中有额外的列,以跟踪付款时间。
使用事务,但是如何返回有关是否有足够席位的信息?
让批处理作业在后台运行,以删除MovieSchedSignUp中的“过期”行。
进行此操作最有效的方法是什么?还有其他想法吗?真的不想使用批处理作业,但是还有其他解决方法吗?
最佳答案
我认为在这种情况下,您将不得不使用事务。
开始交易
插入要添加到临时表的记录
在临时表MovieSched和MovieSchedSignUp之间进行联接
检查记录数(合并的temp和MovieSchedSignUp)是否大于最大大小。
如果可以,请插入
如果可以,则他们提交事务;如果不能,则回滚
交易。
关于mysql - MySQL电影预约系统设计第2部分,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18029834/