嗨,我正在想办法设计一个公交车时刻表的数据库。
有几条线路,每条线路有两条路线(前进和后退),每条线路有几个站(站),每个站可能属于几条路线。
我搜索并提出了下一个数据库设计:
行(id,name,.)
路线(id,name,line_id,.)
站点(id,位置)
route_station (id,route_id,station_id)
时间(id,station_id,line_id,time_forward,time_back)
所以,例如
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的反向路由)。
我的问题是:
times表中添加一个列来指示一天的类型?谢谢。
我已经看过这个设计了,但是我觉得对我的系统来说太多了。
P.S.2我读过关于使用NoSQL数据库可能更适合这类系统的文章,但我的知识仅限于关系数据库。
发布于 2013-07-23 01:27:14
由于您实际上只需要跟踪每个路由上的站点之间的时间,您只需要保持每个路由的开始时间,其余的就可以通过存储每个线路停止的时间增量值(当前站到最后一个站之间的时间)来轻松计算,而不是为每个route_stop保存时间数据。您还需要维护线路上的止损点的顺序,如果这是一个循环路径,您只需用不同的序号将止损点放入链中两次(因此,循环路由上的每个停止将被两次插入到具有不同序号的route_station关系表中)。
当然,如果您需要,可以保留每个站点的时间,但这似乎是多余的,并且使得在路线上添加站点变得更加困难,因为这样您就必须重新计算所有的公交站点时间,而不是简单地添加新的站点并更新下一站的增量时间。
我可能会从这样的数据模型开始(当然,如果您想添加有关公共汽车和司机等的信息,则需要扩展该模型):
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)https://dba.stackexchange.com/questions/46801
复制相似问题