0

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

我的目标是设计一个电影预订系统。用户可以点击电影时间表的一个或多个空座位来预订它们。但他需要在 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 中插入了一行当前日期和时间。

需求自然会产生一些限制:

  1. 由于接口和数据库之间可能存在不一致,当 A 尝试保留席位时,我需要通知用户 A 没有足够的可用席位。(例如,另一个用户 B 可能在 A 之前购买了所有座位。)

  2. 我需要在 MovieSchedSignUp 中自动插入一行,同时确保时间表没有“超额预订”(count_signup<= max_size)以及同时更新count_signup

  3. 我需要确保在 15 分钟内付款,否则必须腾出预留座位。

我的想法是:

  1. 在 MovieSchedSignUp 中有额外的列来跟踪付款时间。

  2. 使用事务,但我如何返回有关是否有足够席位的信息

  3. 在后台运行批处理作业以删除 MovieSchedSignUp 中的“过期”行。

这样做最有效的方法是什么?还有其他想法吗?真的不想使用批处理作业,但是还有其他出路吗?

4

1 回答 1

0

我认为在这种情况下,您将不得不使用事务。

  1. 开始交易
  2. 插入要添加到临时表的记录
  3. 在 temp 表、MovieSched 和 MovieSchedSignUp 之间进行连接以检查记录数(组合 temp 和 MovieSchedSignUp)不大于最大大小。
  4. 如果确定,则进行插入
  5. 如果OK,他们提交事务,如果不是,则回滚事务。
于 2013-08-05T08:03:08.437 回答