2013-10-27 21 views
0

我想以這樣的方式來創建一個公共汽車路線DB,它給出結果如下:如何設計公交路線數據庫?

輸入: 源=站-X,目的地=站-Y

輸出:各種巴士名稱/號碼。其中經過站-X和站-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 

我如何進行存儲的站名各自的路線。 我不是數據庫專家,所以任何幫助都是有價值的。 在此先感謝。

回答

3

你最好創建一個持有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 
2

我認爲你需要以下表格:

BUSROUTE: route_id, routenumber 

BUSSTOPS: stop_id, stopname  

BUSROUTESTOPS: route_id, stop_id, displayorder 

使用倫敦地鐵爲例,該busroute表將持有的值,如「春雷」,「中央」,「區」,「貝克魯」等。

巴士站表可容納站名,例如斯坦莫爾,卡恩斯公園,昆斯伯裏,金斯伯裏,溫布利公園等。由於車站可以爲多條路線提供服務,因此此表格是必需的。

busroutestops包含路線號碼,車站名稱以及車站爲此路線顯示的順序。主鍵是route_id和stop_id的合併。

一旦你已經過去了,你可能需要一個時間表表格,最簡單的表格將包含三個字段:一個id,一個route_id和出發時間。它是作爲讀者的練習而留下的,如何表達回程!

倫敦地鐵大概是而不是一個很好的例子,因爲一些線路 - 特別是北線和區線 - 有多條線路。這些最好被視爲單獨的路線。

+0

爲什麼'displayorder'?公交路線的順序不只是顯示。這是公共汽車實際需要的訂單。 –

+0

@MartinSmith:這是我通常使用的名字。我同意這裏不適合;也許'route_order'會更好。 –

+1

'step_no'或'leg_no'是這個在路線/旅程中的典型名稱。 – RBarryYoung