这类似于另一个问题,但不完全相同。

我的目的是设计电影预定系统。用户可以单击一个或多个空座位以观看电影时间表以保留它们。但是他需要在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/

10-09 13:52