春运又开始了,在贫困的那些年代来讲就是年关将至。年关,是年也是关,随着时代的进步,社会的发展,人民收入不断提高,年味淡了,关也少了。年关是什么?期末考试,催婚?不过对更多背井离乡的人来说可能最大的关就是买票回家了,因为票少,而且每年12306都会崩溃。而12306的业务复杂度是世界上最复杂的这种说法也甚至流传。甚至很多程序员和相关专业人士也是这么说,我身边也有很多同学、同事、朋友提过这个事儿,最初我也是这么觉得,但是考虑的一晚上之后,感觉事实并不想传的这样。

至于为什么大家谣传这个高票系统的业务逻辑十分复杂,而如此复杂的业务逻辑还要高并发,所以12306就年年挂也就可以理解了。那如果我说这个业务逻辑很简单呢,是不是一切问题就迎刃而解了?业务逻辑的复杂度按照广为流传的说法,举个哈大线的例子:哈尔滨-长春-沈阳-大连,如果我买了长春-沈阳的票,哈尔滨到大连的票要减一,但是不影响哈尔滨-长春和沈阳-大连的票,所以这里面的逻辑会很复杂。随着中间站的增多复杂度会越来越高,那真是这样么,我们来具体算一下:

以哈大线G709为例,大连北-鲅鱼圈-鞍山西-沈阳南-沈阳-铁岭西-四平东-长春西-德惠西-哈尔滨西。10个站点,从大连北出发,有9个终点,从鲅鱼圈买有8个终点,以此类推,一共国有9+8+7+……+0= 45种,而且区间票还是相互影响的,所以看起来这个模型确实很复杂。那我们设计一下数据模型看看。数据表名G709:

按照上表,我们简化G709就只有一等座500张,那么按照这个数据模型设计,用户在提交起点终点的时候终点ID需要大于起点ID,如果我买了一张沈阳-长春西的票该如何操作呢?update G709 set Tickets = Tickets - 1 where ID >= 4 and ID < 7,这样这张表就变成了:

如何查找剩余票量呢?比如我想买大连北-铁岭西的票:select min(Tickets) from G709 where ID >=0 and ID < 5;得出剩余票数499。

其实这个问题就已经解决了,是不是两条SQL语句就可以解决了两大卖票的关键难题-剩余票量和售票问题,而且是简单的不能简单的语句了。当然全国不是几这么一趟车次,车有一二三等座,价格,购票的时候有多种接入终端,某个区间票可能会有数据限制等等,其实都是边缘性问题,就不多说了。12306业务逻辑复杂么?

业务逻辑全写在sql_12306的业务逻辑很复杂么?一条SQL语句搞不定?相关推荐

  1. 听说你写sql很溜,一条sql查询语句是如何执行的?

    我们项目中必不可少要与数据库接触,那么一条sql查询语句是如何执行的呢? 本文以MySQL数据库为例.MySQL是典型的C/S架构(client客户端/server服务端),客户端进程向服务端进程发送 ...

  2. Mybatis 获取当前序列和下一个序列值 以及在一个方法中写多条SQL 语句

    目录 1.Mybatis 获取当前序列和下一个序列值 2.Mybatis 在一个方法中写多条SQL 语句 1.Mybatis 获取当前序列和下一个序列值 #获取当前序列值 select XXX_seq ...

  3. 【项目经验】如果想在mapper.xml文件中的一个标签中写多条sql语句,则需要在jdbc的配置文件中稍做配置

    如果想在mapper.xml文件中的一个标签中写多条sql语句,则需要在jdbc的配置文件中稍做配置: url=jdbc:mysql://127.0.0.1:3306/airipo?useUnicod ...

  4. 修改 decimal 默认值为0.00 sql_被经理邀请去“爬山”,只是因为我写错了一条SQL语句?...

    作者:isysc1 链接:https://juejin.im/post/5f06a2156fb9a07e5f5180df 来源:掘金 前戏 SQL 写的妙,涨薪呱呱叫! 新来的实习生小杨写了一条 SQ ...

  5. mysql更新两表所有记录语句怎么写_mysql 一条sql语句update更新两个表

    mysql 一条sql语句update更新两个表 你写过一条sql语句来修改两个表的数据吗? UPDATE test.table1 t1,test.table2 t2 SET t1.aa='a',t1 ...

  6. 写出一条Sql语句,取出表A中的第31条到第40条记录。表A以自动增长的ID作为主键。(注意:ID可能不是连续的)

    写出一条Sql语句,取出表A中的第31条到第40条记录.表A以自动增长的ID作为主键.(注意:ID可能不是连续的).笔试的时候经常会出现这道题,网上的答案也是龙鱼混杂,今天自己实践了一下,找出了正确的 ...

  7. 业务逻辑全写在sql_TiDB 在转转的业务实战

    作者介绍 陈维,转转优品技术部 RD. 世界级的开源分布式数据库 TiDB 自 2016 年 12 月正式发布第一个版本以来,业内诸多公司逐步引入使用,并取得广泛认可. 对于互联网公司,数据存储的重要 ...

  8. access insert语句怎么写_码住!MySQL中超实用的几种SQL语句

    在写SQL时,经常灵活运用一些SQL语句编写的技巧,可以大大简化程序逻辑.减少程序与数据库的交互次数,有利于数据库高可用性,同时也能显得你的SQL很牛B,让同事们眼前一亮. 目录 实用的SQL 1.插 ...

  9. mac写python用什么软件_Mac安装软件,一条指令就搞定

    Mac安装软件,一条指令就搞定 2020-02-05 16:00:05 6点赞 57收藏 12评论 小编注:此篇文章来自即可瓜分10万金币,周边好礼达标就有,邀新任务奖励无上限,点击查看活动详情 1. ...

最新文章

  1. php 23种设计模型 - 装饰模式
  2. Angular变化检测机制:改善的脏检查
  3. vs dll lib 使用记录
  4. 多线程(C++)临界区Critical Sections
  5. linux shell脚本关闭指定端口号的进程
  6. HSRP的初步解析及典型应用2
  7. 绝了!这款工具让 Spring Boot 不在需要 Controller、Service、DAO、Mapper 了
  8. php arrayaccess 二维,PHP数组式访问接口ArrayAccess用法分析
  9. ubuntu18.04 ros 使用anaconda创建虚拟环境 python3.7安装 opencv-3.4.6,TensorFlow安装,notebook
  10. border_mode
  11. 重磅炸弹之英译世界名著137部
  12. Oracle客户端安装教程(图文)
  13. 宝鸡渭滨区11―12学年度第一学期高二期末联考试卷高二地理
  14. 【统计学】利用spss正态分布假定检验 S-W检验 K-S检验 直方图 Q-Q图
  15. 我在京东这一年—张亮
  16. TimerFd使用心得
  17. 餐饮管理系统哪个好用?
  18. Win10下的WSL(Linux子系统)开发环境搭建(PHP+Nginx+Mysql+Composer)
  19. Sqlserver 默认连接 master 库
  20. 看望月新一证明Abc猜想的正确姿势

热门文章

  1. 计算机网络及应用的说课稿,第一课计算机网络及应用说课稿
  2. java view template_Java设计模式之模板方法模式(Template Method)
  3. 特斯拉在美国召回947辆电动汽车 因倒车影像显示延迟
  4. Redmi Note10系列配LCD居中挖孔屏:5月26日正式发布
  5. 拼多多市值超2100亿美元 黄峥成中国第二大富豪
  6. 华为nova8系列获得3C认证:搭载66W超级快充怒追Mate40
  7. 声网:疫情期间日均通话分钟数较日常增长近一倍 达15.6亿分钟
  8. 华为P40 Pro将搭载索尼IMX 700传感器:支持十六像素合一
  9. 十一假期国人消费力爆棚,国内旅游收入超6497亿,你花了多少?
  10. 新能源补贴退坡 广汽新能源、比亚迪不涨价 蔚来最狠!