[不是:用户在 Development of railway enquiry system, how to model Trains, Stations and Stops? 再次询问这个问题] 我的问题描述:
假设我在 ROUTE-1 有一个 BUS-123 它将通过 A、B、C、D、E、F、G、H 和 BUS-321 在 ROUTE- 2 通过 D、E、F、X、Y、Z。 如果有人输入 B 作为源点,F 作为目标点,那么 ROUTE-1 和 BUS-123 应该显示在结果中。但是,如果有人输入 H 作为源,A 作为目标,则结果不应显示,因为返回可能并不总是与旅行的相同。 但是,如果一个人输入 A 作为源,Z 作为目的地,则 BUS-123 与 ROUTE-1 和 BUS-321 与 ROUTE-2 应显示。
我的问题是: 我如何将该路线信息存储在数据库中?如果我像下面这样存储在 RDBMS 中
BUS_NUMBER ROUTE_NUMBER VIA_ROUTES
BUS-123 ROUTE-1 A, B, C, D, E, F, G, H
BUS-321 ROUTE-2 D, E, F, X, Y, Z
然后我的搜索将如何工作。我的意思是如何在字符串中搜索它。 如果我将所有 VIA_ROUTES 存储在不同的不同列中,那么它将如何......?请用你自己的技术建议我。这并不紧急,但我正计划进行基本的公交路线搜索,因此非常感谢您的评论和帮助。
最佳答案
我会将其建模为循环图。每个公交车站由一个顶点表示。两个站点之间的每个直接连接都由标有路线编号的边表示;因此,每条路线都是一系列相连的边。也使边缘定向。并非所有从 A 站到 B 站的路线也必然从 B 站到另一个方向的 A 站。
可能想要用估计的旅行时间填充每条边,该路段的方差度量(或多个度量)——在周日晚上凌晨 2 点,方差可能很低,但在周五晚上 5 点,它可能非常高,还有出发时间列表。
然后是图形遍历和寻找“最低成本”路线的问题,无论您选择如何定义“最低成本”——您可能需要考虑的因素包括:
- 总行程时间
- 等待下一航段出发的总时间。
- 在任何一个站点的等待时间。
- 距离?
应该注意,等待时间过长是不好的(在 1 月气温为 -10 华氏度时是否曾花 40 分钟等公交车?)。太少也不好,因为它会增加错过连接的可能性,因为公共(public)汽车的时间表往往有相当大的可变性,因为它们对本地交通状况的波动 react 非常敏感。
我就是这样做的。
不过,我不认为我会尝试直接在 SQL 中解决它。
不过,该模型非常适合 SQL。您需要以下实体,然后是一些实体,因为您需要表示时间表等:
- 停止。一个公共(public)汽车站。图的顶点。
- 路线。公交路线。
- 分割。两个站点之间的直接链接。图的边。
- RouteSegment。表示组成路线的路段的有序序列的关联实体。
关于mysql - 如何制作一个简单的公交路线搜索引擎?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8189245/