MySQL电影预约系统设计第2部分

时间:2013-08-03 05:57:23

标签: mysql database database-design

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

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

这些要求自然会产生一些限制因素:

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

  2. 我需要 原子地 在MovieSchedSignUp中插入一行,同时确保计划不会“超量预订”(count_signup< = {{1 }}以及同时更新max_size

  3. 我需要确保在15分钟内付款,否则必须释放预订座位。

  4. 我的想法是:

    1. 在MovieSchedSignUp中添加额外的列以跟踪付款的时间。

    2. 使用交易 ,但如何返回有关座位是否足够的信息

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

    4. 最有效的方法是什么?还有其他想法吗?不是真的想要使用批处理作业,但还有其他方法吗?

1 个答案:

答案 0 :(得分:0)

我认为在这种情况下你将不得不使用交易。

  1. 开始交易
  2. 插入要添加到临时表的记录
  3. 在临时表,MovieSched和MovieSchedSignUp之间进行连接 检查记录数(组合temp和MovieSchedSignUp)不大于最大大小。
  4. 如果确定则执行插入
  5. 如果确定他们提交了交易,如果没有,则回滚 事务。