问个数据库表设计的问题. 如果是影院订票系统,如何设计放映厅和座位的时间轴问题?
发布于 6 年前 作者 phpsmarter 6116 次浏览 来自 问答

如果是影院订票系统,如何设计放映厅和座位的时间轴问题? 这个地方看起来比电商系统要复杂,
每个座位在每天,每个时段的信息是不同的 ,怎么在数据库设计的时候体现出这一点?

具体到某天,某时间段,每个座位,可以认为和商品一样,库存为1, 售出就为0 . 前面的时间作为商品目录和子目录, 可以这样思考吗? 这样做,这个表就感觉就是动态的, 不知道怎么描述了.

现在确实佩服12306的系统, 比电商系统复杂多了.

21 回复

不同场次的同一个位子不是同一个商品,我觉得你方向没啥问题。

@aojiaotage 其实前面考虑过使用数组来表示,但是仍然不知道怎么搞.
某天->某时间段->某放映厅->[座位1,座位2, 座位3,…] 感觉在编表的时候,也要注意很多问题,所以才在这里请教

@phpsmarter

数组来表示肯定不行,不支持索引

没有这个影院订票系统的经验,强答一波。

如果是我,是这么设计,有几个表。

  1. 影片表,记录影片信息
  2. 影厅表,记录影厅信息,比如影厅编号,座位号,有几行,有几列等
  3. 上映表,记录上映列表。关联表1和表2,比如xxx影片在xx影厅,从xx点到xx点上映,价格xxx。
  4. 座位表,记录对应上映表中的座位号。关联表3,记录谁谁谁在上映电影中,购买了xxx行xxx座的票,其他的信息,比如是影片详情,比如影厅详情,总共有几个座位等等这些信息,都可以通过关联的表3拿到

或者可以这样,在创建表3的时候,就生成好对应的座位的表4数据。在创建之初,是没有购买者的数据的,意味着这个座位还没有人买。如果座位有人买之后,就增加对应的信息,比如购买者名字,购买时间,等等。这样就很容易筛选出,哪些座位是已经被购买了的,哪些是空位

@axetroy 多谢了.研究一下

配上配图

1.png

12306JNMA版订票系统构架设计,看看这个,火车票和飞机票是比较困难,还有连程的问题

@axetroy 是在是佩服.新年愉快

@alphakid 好的,研究一下. 实际是和机票,火车票是一样的. 不过 12306的更复杂

国内12306采用的是分时分段票数算,不是很精确,也不实时,和民航系统有点差距,民航系统是6070年代老美设计的,民航的IT技术玩到现在,不知所以然,所以一直还是采用民航eterm系统,要不然老早升级换代了,当然还有和国际数据互查询的问题

@alphakid 正在看. 影院也有比火车票复杂的地方, 每部电影的时间安排是不同的, 火车的,每年的时刻表定下来就不会变了. 但是火车的站之间还会有上下车的, 肯定复杂. 慢慢看看消化一下. 多谢了. 新年愉快.

以前研究过12306,我有插图版的office文档,你需要吗?

@alphakid 好啊,如果可以的话, 给我发一份

票这个东西,是本身就有,而且是因为上映电影才有,不是因为购买才有的。 有一种方方式就是,每添加一部电影(阿凡达),字段具体到哪个放映厅(二号3D放映室),哪个日期时间段(10 月1 号 午夜场 21 - 13时),然后生成它的票,如何生成这个票,要根据放映厅的基本参数有关,,所以放映厅的 参数必须要记录下来,,记下来的好处就是便于选座,像猫眼电影还支持在线选座。

当然这个电影还应该有所属分类,便于用户筛选,比如科幻。。。。。。。 用户想要看(阿凡达),选中之后,应该还可以选择场次与时间段,所以只需要查询 name 等于 阿凡达的就可以查出来的了,当然已经放映过的,你可以定期清理,也可以导出去存起来。

你要是觉得 name = 阿凡达的数据太多了,可以吧电影名字 提取到另外一张表里面,做连接。但是这样做,从用户-》票—》电影信息 -》 电影名称,这就需要多做一次连接。

这个票跟这个表是多对一关系,很明显。当用户购买成功之后,把票与用户关联起来,就说明被买了。对于选座,我个人建议拿出来表做缓存,记录下一个 JSON 对象,,也可以把这个直接记录到放映表里面,还可以加一个还剩多少票,因为每次都要去计算票数的话,浪费,把卖出去的位置记录到 JSON上去,选座的时候,请求这个数据,把相应的位置给其他选座用户标明。

当用户退票的时候,记得更新缓存JSON,当然购票,退票的日志啥的,那就不必多说了。

当用户查我的票的时候,可能还要连接查

或者在前端,拿到放映厅位置数,减去JSON 里面卖出去的。这种表结构很难吗?貌似没啥其他的需求了吧。

@MiYogurt 要实现的就是在线选座 这个需求.

别人在看春晚,我们在讨论技术问题 . 哈哈

@phpsmarter 哈,新年快乐,新年刚刚放完炮。

我在3楼提供的思路,已经能满足你的需求了。

关键要在创建上映表的时候,创建所有的座位信息。

然后这些座位就像商品一样出售

@axetroy 多谢了 ,对的 就是 12306JNMA版订票系统构架设计 12306JNMA版订票系统构架设计 这篇文章中的票池, 这个表每天要生成一张, 这张表包括每天,每厅,每时间段,每座位的信息. 前面思考时觉得肯定有动态的表, 应该就是这个地方了.
刚开始一锅粥,以为这里比较复杂,认为可能有时间交错问题,像球队之间比赛一样,场次安排很难实现,其实没有, 每个放映厅的时间轴是按顺序来的,所以即使是放映的电影时间有有长短, 对于安排上没有干扰.

这就和电商系统的商品表一样了. 一个时间段(14天)-> 每天->每厅->每时间段->每座位 都是一个商品.

  • 一个时间段的座位对应一个或0个用户
  • 一个用户可以有 多个座位(同场次, 不同座位)

@alphakid

这么看,民航的票务还是没法和火车的票务比啊! 机票买了就是卖了. 火车票还要考虑中途换乘客的问题, 比如 从北京到上海,有10站, 就相当于有十件商品,一个旅客买了 北京到南京的, 相当于购物车有六件商品, 余下的四件还可以卖个其他的乘客.

这么操作,延时是在哪里产生的呢?

@phpsmarter 火车票还要考虑中途换乘客的问题,飞机票也一样,有的飞机会经停两三站,有的还会转机等等问题,飞机票还可以定一圈行程。

回到顶部