请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

出站时间跨一天和跨多天的情况数据库需要怎么设计呢?

老师,下午好!
请教一个问题?
我查了一下,最长的火车 Z265 – 广州~拉萨,行驶时长为53时53分。跨了两天才到目的地。
我的问题是:如何体现出这种第2天,还是第3天才到达的情形。以上面的Z265为例,同是从 广州 进站,目的地是 郑州 的话,页面上目的地处会多一个+1,表示第2天才到,而目的地是 拉萨 的话,会多一个 +2, 表示第3天才到。这时,如果更改出发站点,更为 郑州 进站的话,目的地同样不变是 拉萨,这时候就由 +2 变为 +1,表示第2天才到。
现在问题来了。
数据库要怎么设计来体现这种关系呢?
我能想到的是单独设计一张表,

create table `train_station_span_days` (
  `id` bigint not null comment 'id',
  `train_code` varchar(20) not null comment '车次编号',
  `name` varchar(20) not null comment '站名',
  `in_time` time comment '进站时间', 
  `out_time` time comment '出站时间', 
  `span_days` int not null comment '跨天数,即进站到出站跨了几天', 
  `create_time` datetime(3) comment '新增时间', 
  `update_time` datetime(3) comment '修改时间',
  primary key (`id`),
  unique key `train_code_index_unique` (`train_code`, `index`),
  unique key `train_code_name_unique` (`train_code`, `name`) 
) engine=innodb default charset=utf8mb4 comment='车次车站跨天表';

但这样做的话,就算是一个车次总共有10个站,两两排列组合起来记录也是很多的,请问老师,应该怎么设计(来体现这种两两站台是否有跨天,及跨了几天的情形)呢?
谢谢老师的解答!辛苦老师了!!!

正在回答

1回答

你看是不是可以这样:进站时间+运行时长,到站时间由运行时长自动计算,如果运行时长超过24小时,就是+1天。

0 回复 有任何疑惑可以回复我~
  • 提问者 慕神4535282 #1
    照您这样说,表具体要怎么设计呢?
    这个`运行时长`总不可能放到现有的train_station表中吧?
    因为同一个车次,广州到拉萨   和  广州到郑州 的运行时长是不相同的。
    
    您的意思是指把我上面写的
    train_station_span_days 表中的 
    
    `span_days` int not null comment '跨天数,即进站到出站跨了几天', 
    
    这一列改成 `running_hours` int not null comment '运行时长',    吗?
    
    但这样做的话,情况还是绕回来了,就算是一个车次总共有10个站,两两排列组合起来记录也是很多的,你的意思是说,我的 train_station_span_days 表设计是对的吗?
    回复 有任何疑惑可以回复我~ 2023-08-19 15:36:05
  • 甲蛙 回复 提问者 慕神4535282 #2
    运行时长可以都跟第一站比较,比如出发站是0,第2站是1,第3站是3,第4站是5。均表示从出发站到本站的运行时长。
    假设我要查第2站到第4站的时长,那就是:第4站的“5” - 第2站的“1 = 4小时,就知道没有跨天
    回复 有任何疑惑可以回复我~ 2023-08-21 13:42:28
  • 提问者 慕神4535282 回复 甲蛙 #3
    你的意思是说,`运行时长`不放到数据库train_station表里面吗?老师你说的这个我也有考虑过,根据  出发时间+运行时长>24 来判断是否跨天,但是这样子没办法识别跨了两天的情况,或者说,跨一天的情况也没办法来识别?
    以你上面的例子来说,运行时长可以都跟第一站比较,比如出发站是0,第2站是1,第3站是3,第4站是5。...   第11个站为第二天的2:30点,
    假设我要查第11站到第2站的时长,那就是:第11站的“2:30” - 第2站的“1" = 1:30小时,很明显这有误了。
    从用户友好角度来说,在下拉框中选择第X(这里X等于2)天,再在右侧中选择2:30:00,比输入26:30:00 要更友好一点吧,而且,好像a-time-picker组件也没有26小时可以选择。
    
    我好像明白了,可以在train_station表中加一个第几天到达的字段,e.g:
    `arrival_day` int not null comment '这个是绝对值,从始发站当天开始算,第几天到达',
    比如,出发站   广州 这个arrival_day  就填1,表示第1天(当天)。
    中途的   郑州 这个arrival_day 就填2,表示第2天到达。
    最后一站的   拉萨  这个 arrival_day  就填3,表示第3天到达。
    
    这样,当查广州  ~  拉萨时, 用3 - 1 = 2 就显示 +2 天。
    当查   郑州 ~  拉萨时, 用 3- 2 = 1 就显示  +1  天。
    
    而这里的  `arrival_day`  就对应于我上面说的 在下拉框中选择第X(这里X等于2)天。
    
    您看这样可行吗?谢谢老师的解答!
    回复 有任何疑惑可以回复我~ 2023-08-21 15:56:44
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信