如何设计公交车站查询数据库架构?


9

我们有公交车站数据,我们想构建一个应用程序,该应用程序将为给定的起点站和终点站提供线路/多条线路。

例如,用户尝试获取从station1到station2的公交线路建议。

如果有一条公交线路可以同时覆盖station1station2,则应返回该线路。结果可能如下所示:

Step1: station1 -- station2

如果station1和station2之间没有直接总线,则应用程序应尝试查找交换计划,例如,结果可能如下所示:

Step1: station1 -- exchangestation

Step2: exchangestation -- station2

现在我们有了数据,但是我们不知道如何在数据库中设计数据模型,如何创建架构以提高查询效率?

=============================================

更新:

在此处输入图片说明

例如,我有四条总线(实际上是两条),每条都有不同的颜色:

l1: A-B-C-D
l2: D-B-A (in fact, the l2 is the reverse of l1 except the l2 will skip station `C`.
l3: E-B-D-F
l4: F-D-B-E(reverse of l3) 

现在,如果我们要将这些信息保存在数据库中,以查询给定一个站点到另一个站点的总线计划,那么我们需要多少张表,以及应该在每个表中放什么?


@ giser.i也有类似的问题。如果您做到了,您能回答吗gis.stackexchange.com/questions/70253/…–
斯科特(

Answers:


6

我认为您需要构建另一个表,将所有路由定义为其他路由的组合。然后查询此表并加入实际路线以获取几何图形。

如果查询的是“从站”到“到站”,并且每个部分都有一个“从站”和“到站”。但是,如果要包括包含多个部分的路由,则可以有另一个表“ routes”,其内容如下:

  • “路线名称”,“路线ID”,“从车站”,“到车站”

您还需要原始的sections表,例如:

  • “部分名称”,“部分ID”等...

而且我认为您需要另一个联接表,例如:

  • “路线ID”,“路段ID”

并且该表存储了route和section表之间的一对多关系,因此,在上面的示例中,联接表中有两行,每一步一行。该查询是在路线表上进行的,用于往返于站点的查询。返回的数据(如果是空间数据)是路径表中的详细信息,而是截面表中的空间数据。也许您可以将每个部分的时间加起来,等等。

那有意义吗?


实际上,我们现在没有表格,只有原始数据是文本格式。
giser

没关系。我想我的答案会成立。我会用三张桌子。
Alex Leith

我用一个实时示例更新了我的帖子,您可以抽出一些时间检查一下吗?
giser

@ AlexLeith.i在这里也有类似的问题gis.stackexchange.com/questions/70253/…–
斯科特(

3

您可能应该为此选择一个工具,并遵循该工具强制执行的模式(例如pgRouting)。

如果要在没有表的情况下执行此操作,则只需要两个表即可存储顶点和节点。

诀窍是您的图像显示一种空间方法,而实际上您需要一种临时方法(图像待处理)。总线没有从节点A到节点B。总线从节点A @ 12:00到节点B @ 12:10

因此,我们为每个站点创建一个节点+为每个站点的每个离开时间创建一个节点。每个节点都具有3个单向链接:

  • 链接到巴士目的地(A @ 12:00-B @ 12:10花费:10分钟)
  • 链接到从该车站出发的下一班巴士(A @ 12:00-A @ 12:30费用:30分钟)
  • 链接到基本节点(从A @ 12:00到A花费:0分钟)

现在要找到从A点到C点的连接,我们选择站点A上最早的匹配点,然后找到从那里到站点C的基础节点的方式。

节点:

id|station|time
---------------
1 |A      |NULL
2 |B      |NULL
3 |A      |12:00
4 |B      |12:10

顶点

id|start_node|end_node|line|cost
---------------------------
1 |3         |4       |l1  |10
2 |3         |1       |NULL|0
3 |4         |2       |NULL|0

.i在这里也有类似的问题gis.stackexchange.com/questions/70253/…–
斯科特(

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.