首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >客车时刻表数据库设计

客车时刻表数据库设计
EN

Database Administration用户
提问于 2013-07-22 18:42:20
回答 1查看 4.2K关注 0票数 1

嗨,我正在想办法设计一个公交车时刻表的数据库。

有几条线路,每条线路有两条路线(前进和后退),每条线路有几个站(站),每个站可能属于几条路线。

数据库的主要目标是方便地为具有特定线路的特定公共汽车站选择下一个到达时间。

我搜索并提出了下一个数据库设计:

行(id,name,.)

路线(id,name,line_id,.)

站点(id,位置)

route_station (id,route_id,station_id)

时间(id,station_id,line_id,time_forward,time_back)

所以,例如

代码语言:javascript
复制
times Table
id  station_id   line_id   time_forward  time_back    
1       10          100         9:15         9:18
2       10          100         9:30         9:33
3       10          100         9:45         9:48
4       10          100         10:00        10:03
5       10          100         10:15        10:18
6       10          100         10:30        10:33
7       10          100         10:45        10:48

8       20          100         9:20         null
9       20          100         9:35         null
10      20          100         9:50         null
11      20          100         10:05        null
...
45      40          200         9:55         null
46      40          200         9:09         null
...   

在前7行中,line_id=100的行在车站的不同时间以station_id=10停止( time_back中的null表示没有经过station_id=20的反向路由)。

我的问题是:

  1. 我不确定这个设计是否正确。我不是在找表演。我只是想知道我是否会在未来的时间对这个设计有问题(例如:插入一个新的线路站容易吗?)对于有特定线路站的公交车站,是否容易选择下一个到达时间?
  2. 我如何处理不同的时间频率?因为平日和周末不一样。如果我的设计是好的,那么上面的例子将很好地工作,抵达时间在工作日,但不适用于周末。我需要第二个表或者在times表中添加一个列来指示一天的类型?

谢谢。

我已经看过这个设计了,但是我觉得对我的系统来说太多了。

P.S.2我读过关于使用NoSQL数据库可能更适合这类系统的文章,但我的知识仅限于关系数据库。

EN

回答 1

Database Administration用户

回答已采纳

发布于 2013-07-23 01:27:14

由于您实际上只需要跟踪每个路由上的站点之间的时间,您只需要保持每个路由的开始时间,其余的就可以通过存储每个线路停止的时间增量值(当前站到最后一个站之间的时间)来轻松计算,而不是为每个route_stop保存时间数据。您还需要维护线路上的止损点的顺序,如果这是一个循环路径,您只需用不同的序号将止损点放入链中两次(因此,循环路由上的每个停止将被两次插入到具有不同序号的route_station关系表中)。

当然,如果您需要,可以保留每个站点的时间,但这似乎是多余的,并且使得在路线上添加站点变得更加困难,因为这样您就必须重新计算所有的公交站点时间,而不是简单地添加新的站点并更新下一站的增量时间。

我可能会从这样的数据模型开始(当然,如果您想添加有关公共汽车和司机等的信息,则需要扩展该模型):

代码语言:javascript
复制
lines (id, name, ...)

routes (id, name, line_id, ...)

stops (id, location)

line_stops (id, line_id, stop_id, order, time_delta)

route_start_times (id, route_id, start_time)
票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/46801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档