问个数据库表设计的问题. 如果是影院订票系统,如何设计放映厅和座位的时间轴问题?
发布于 7 年前 作者 phpsmarter 7668 次预览 最后一次回复是 7 年前 来自 问答
如果是影院订票系统,如何设计放映厅和座位的时间轴问题?
这个地方看起来比电商系统要复杂,
每个座位在每天,每个时段的信息是不同的 ,怎么在数据库设计的时候体现出这一点?
具体到某天,某时间段,每个座位,可以认为和商品一样,库存为1, 售出就为0 . 前面的时间作为商品目录和子目录, 可以这样思考吗? 这样做,这个表就感觉就是动态的, 不知道怎么描述了.
现在确实佩服12306的系统, 比电商系统复杂多了.
21 回复
不同场次的同一个位子不是同一个商品,我觉得你方向没啥问题。
@aojiaotage 其实前面考虑过使用数组来表示,但是仍然不知道怎么搞.
某天->某时间段->某放映厅->[座位1,座位2, 座位3,…] 感觉在编表的时候,也要注意很多问题,所以才在这里请教
@phpsmarter
数组来表示肯定不行,不支持索引
没有这个影院订票系统的经验,强答一波。
如果是我,是这么设计,有几个表。
或者可以这样,在创建表3的时候,就生成好对应的座位的表4数据。在创建之初,是没有购买者的数据的,意味着这个座位还没有人买。如果座位有人买之后,就增加对应的信息,比如购买者名字,购买时间,等等。这样就很容易筛选出,哪些座位是已经被购买了的,哪些是空位
@axetroy 多谢了.研究一下
配上配图
12306JNMA版订票系统构架设计,看看这个,火车票和飞机票是比较困难,还有连程的问题
@axetroy 是在是佩服.新年愉快
@alphakid 好的,研究一下. 实际是和机票,火车票是一样的. 不过 12306的更复杂
国内12306采用的是分时分段票数算,不是很精确,也不实时,和民航系统有点差距,民航系统是6070年代老美设计的,民航的IT技术玩到现在,不知所以然,所以一直还是采用民航eterm系统,要不然老早升级换代了,当然还有和国际数据互查询的问题
12306JNMA版订票系统构架设计 http://cnodejs.org/topic/5066d64701d0b801487dd635
@alphakid 正在看. 影院也有比火车票复杂的地方, 每部电影的时间安排是不同的, 火车的,每年的时刻表定下来就不会变了. 但是火车的站之间还会有上下车的, 肯定复杂. 慢慢看看消化一下. 多谢了. 新年愉快.
以前研究过12306,我有插图版的office文档,你需要吗?
@alphakid 好啊,如果可以的话, 给我发一份
票这个东西,是本身就有,而且是因为上映电影才有,不是因为购买才有的。 有一种方方式就是,每添加一部电影(阿凡达),字段具体到哪个放映厅(二号3D放映室),哪个日期时间段(10 月1 号 午夜场 21 - 13时),然后生成它的票,如何生成这个票,要根据放映厅的基本参数有关,,所以放映厅的 参数必须要记录下来,,记下来的好处就是便于选座,像猫眼电影还支持在线选座。
当然这个电影还应该有所属分类,便于用户筛选,比如科幻。。。。。。。 用户想要看(阿凡达),选中之后,应该还可以选择场次与时间段,所以只需要查询 name 等于 阿凡达的就可以查出来的了,当然已经放映过的,你可以定期清理,也可以导出去存起来。
你要是觉得 name = 阿凡达的数据太多了,可以吧电影名字 提取到另外一张表里面,做连接。但是这样做,从用户-》票—》电影信息 -》 电影名称,这就需要多做一次连接。
这个票跟这个表是多对一关系,很明显。当用户购买成功之后,把票与用户关联起来,就说明被买了。对于选座,我个人建议拿出来表做缓存,记录下一个 JSON 对象,,也可以把这个直接记录到放映表里面,还可以加一个还剩多少票,因为每次都要去计算票数的话,浪费,把卖出去的位置记录到 JSON上去,选座的时候,请求这个数据,把相应的位置给其他选座用户标明。
当用户退票的时候,记得更新缓存JSON,当然购票,退票的日志啥的,那就不必多说了。
当用户查我的票的时候,可能还要连接查
或者在前端,拿到放映厅位置数,减去JSON 里面卖出去的。这种表结构很难吗?貌似没啥其他的需求了吧。
@MiYogurt 要实现的就是在线选座 这个需求.
别人在看春晚,我们在讨论技术问题 . 哈哈
@phpsmarter 哈,新年快乐,新年刚刚放完炮。
我在3楼提供的思路,已经能满足你的需求了。
关键要在创建上映表的时候,创建所有的座位信息。
然后这些座位就像商品一样出售
@axetroy 多谢了 ,对的 就是 12306JNMA版订票系统构架设计 12306JNMA版订票系统构架设计 这篇文章中的票池, 这个表每天要生成一张, 这张表包括每天,每厅,每时间段,每座位的信息. 前面思考时觉得肯定有动态的表, 应该就是这个地方了.
刚开始一锅粥,以为这里比较复杂,认为可能有时间交错问题,像球队之间比赛一样,场次安排很难实现,其实没有, 每个放映厅的时间轴是按顺序来的,所以即使是放映的电影时间有有长短, 对于安排上没有干扰.
这就和电商系统的商品表一样了. 一个时间段(14天)-> 每天->每厅->每时间段->每座位 都是一个商品.
@alphakid
这么看,民航的票务还是没法和火车的票务比啊! 机票买了就是卖了. 火车票还要考虑中途换乘客的问题, 比如 从北京到上海,有10站, 就相当于有十件商品,一个旅客买了 北京到南京的, 相当于购物车有六件商品, 余下的四件还可以卖个其他的乘客.
这么操作,延时是在哪里产生的呢?
@phpsmarter 火车票还要考虑中途换乘客的问题,飞机票也一样,有的飞机会经停两三站,有的还会转机等等问题,飞机票还可以定一圈行程。