[不是:用户在Development of railway enquiry system, how to model Trains, Stations and Stops?再次询问此问题] 我的问题说明:
假设我在ROUTE-1 中有一个 BUS-123,它将穿过ROUTE-中的A,B,C,D,E,F,G,H和 BUS-321 2 到D,E,F, X,Y,Z 。 如果有人输入B作为源点而F输入目标点,那么带有BUS-123的ROUTE-1应显示在结果中。但是如果有人输入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存储在不同的不同列中,那么它将如何...?请用你自己的技巧建议我。这并不紧急,但我打算进行基本的公交路线搜索,所以感谢您的评论。
答案 0 :(得分:4)
我将其建模为循环图。每个公交车站由一个顶点表示。两个站点之间的每个直接连接由标有路由号码的边缘表示;因此,每条路线都是一系列连接的边缘。也使边缘定向。并非所有从A站到B站的路线都必须从B站往另一个方向停止A.
可能希望用估计的旅行时间填充每个边缘,这条腿的方差的度量(或度量) - 在星期日晚上凌晨2点,方差可能很低,但是在星期五晚上的下午5点,它可能会非常高,并列出出发时间。
然后是图遍历并找到“最低成本”路线,但是您选择定义“最低成本” - 您可能要考虑的因素包括:
应该注意的是,太多的等待时间是不好的(1月份等待公共汽车需要花费40分钟才能达到-10华氏度?)。太少也是坏事,因为它增加了错失连接的可能性,因为公交车的时间表往往具有相当大的可变性,因为它们对当地交通状况的波动有高度响应。
我就是这样做的。
我不相信我会尝试直接在SQL中解决它。
该模型非常适合SQL。您需要以下实体,然后是一些实体,因为您需要表示时间表等:
答案 1 :(得分:0)
我认为bus_numbers并不重要,因为您可以稍后查找它们。也许你需要的是在一个大矩阵中创建一个带有bus_stops的二维矩阵,然后使用像dijkstra这样的图遍历算法来找到从A到B的最短路径。当你得到它时你可以很容易地查找bus_numbers和向客户展示它们。因此,我认为您的数据库已经非常好了。
答案 2 :(得分:0)
我有一个route
表和一个route_part
表。后者将包含对路由的引用,加上用于排序的序数,以及对stop
表的引用。因此,您可以存储任何路线。
在搜索方面,如果您希望搜索两站之间的路线,您可以在route_part
表中查找两个站点,看看它们在任何情况下是否出现在同一路线上(承载请注意,路线可能存在于一个方向而不是另一个方向。)