如何设计公交路线数据库?

时间:2013-10-27 14:01:01

标签: sql database database-design

我想以这样的方式创建一个总线路由DB,它给出如下结果:

输入:      Source = station-X,Destination = station-Y

输出:各种公交名称/号码。通过Station-X和Station-Y

到目前为止,我有: 总线(bus_no), Bus_Route ()

    Bus(bus_name/no.)
id   |   bus_no
1    |   33
2    |   33A

  Bus_Route(route_id,bus_no)
id   |   route_id  |  bus_no
1    |   route-A   |   33
2    |   route-B   |   33A

如何继续存储相应路线的电台名称。 我不是数据库专家,所以任何帮助都是有价值的。 提前谢谢。

2 个答案:

答案 0 :(得分:6)

你最好创建一个包含STATION - ROUTE关系的额外表格。你在这里定义了一个多对多关系,这意味着一个站可以有很多路由,一个路由可以有很多站。

总线(仅当多个物理总线存在且具有相同的* bus_no *时才需要)

id   |   bus_no
---------------
1    |   33
2    |   33A
3    |   33A

bus_routes(* route_id *和* bus_no *都必须是唯一值)

route_id  |  bus_no
---------------------
route-A   |   33
route-B   |   33A

stations_routes(多对多,route_order告诉我们路线内的顺序)

route_id  |  station_id |  route_order
------------------------------------
route-A   |   Egham     |   1
route-A   | Haymarket   |   2
route-A   | Egham Plaza |   3
route-B   |   Egham     |   1
route-B   |   Langley   |   2

答案 1 :(得分:2)

我认为您需要以下表格:

BUSROUTE: route_id, routenumber  

BUSSTOPS: stop_id, stopname     

BUSROUTESTOPS: route_id, stop_id, displayorder

以伦敦地铁为例,busroute表将包含'Jubilee','Central','District','Bakerloo'等值。

busstops表将保存电台名称,例如Stanmore,Canons Park,Queensbury,Kingsbury,Wembley Park等。此表是必需的,因为电台可以为多条路线提供服务。

busroutestops保存路线编号,电台名称以及电台为此路线显示的顺序。主键是route_id和stop_id的合并。

一旦你超越了这个,你可能需要一个时间表,最简单的形式包含三个字段:id,route_id和出发时间。它留给'作为读者的练习'如何代表回程!

伦敦地铁可能是一个很好的例子,因为有些线路 - 尤其是北线和地区线路 - 有多条路线。这些最好被视为单独的路线。