mysql - 如何制作一个简单的公交路线搜索引擎?

标签 mysql sql database web

[不是:用户在 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-123ROUTE-1BUS-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/

相关文章:

mysql - 简化mysql查询

c# - 使用 C# 在 Mysql 中使用回滚

mysql - 从当前用户及其所有 friend 获取更新 - mysql 查询

c# - MySQL 连接器/网络和 C# 的希腊字符不正确

python - 是否有与 django-evolution 等效的 SQLAlchemy?

sql - 如何同时选择 row_number 和 count over partition?

php - 插入排名的最佳方式(带有php的SQL数据库)

java - Java 和 Hibernate 中外键的使用

php - SQL语法错误

sql - 数据库关系问题