2012-01-26 44 views
1

我想設計後端,並有以下用例。我如何設計間歇通過點旅行行程

我有從A點到B點的航班信息,需要定義支持不同用例的模式。

我試圖找到一個很好的方法來處理這種情況,當有中途停留點時。

例如,飛行路線甲 - >乙居然是這樣的:

A -> C 
C -> D 
D -> B 

所以A - > B是一個實體,但反過來,它是由幾個腿。

我目前的設計:

AirLeg表:

- id 
- departure and arrival information 
- viaPoints: BOOL 

viaPoints表:

- id 
- airLegId // FK into Airleg table 
- similar departure and arrival information from airLeg table 

//如果viaPoints標誌AirLeg表爲真,viaPoints表,可以被詢問,使用airLegId表來檢索中介。

有沒有更好的方法來處理這個問題?

我想我會添加我存儲大約一個單程或段的信息:

  • AirLeg-ID
  • 出發機場:FK到機場
  • 到達機場:FK到機場
  • 出發時間戳(以出發城市的當地時間)
  • 到達時間戳(以到達城市的當地時間)
  • 飛行durati在此airleg:靜態值
  • FLIGHTID:FK到航空公司收益航空公司名稱和航班號
  • 行李政策:文本
  • 雜項(TEXT:取消政策)

編輯:

我加了一個相關的question,我想這個問題的答案將不得不迎合這兩個要求。

如果在跳閘多個段,價格是爲完整行程限定,而不是單獨的段

類似地,對於往返的價格被指定爲一個單元,而不是從A-單個組分>乙並返回,B-> A。

回答

1

我設計它是這樣的:

Journeys: 

- ID 
- Other info (billing, whatever) 

Segments: 

- ID 
- JourneyID (FK) 
- departure, arrival, etc 

而且

Journeys_View 

- Journeys.* 
- First departure 
- Last arrival 
+0

我假設你通過查看最早的部分(基於時間?)來計算旅程的第一個和最後一個部分 –

+0

是的。如果您首先選擇一箇中間段,然後選擇連接段,那麼使用ID並不是一個好主意 - 因此,UTC中的出發/到達時間是訂單標準 –

+0

我將時間存儲在城市的當地時區中。我有一個單獨的表格結算。所以,在我的桌子上,我所有的是起飛/到達機場,時間和航班信息。那麼不是那麼你建議類似於我在問題中發佈的內容嗎? – brainydexter

1

我想這兩個問題拼湊一個額外的觀點,這不是完全清楚自己想要什麼做 - 但我認爲它歸結爲以下。

你有一個行程,這是父項。一個「行程」有多條腿(問題:你是否想要處理多部分行程,例如「倫敦 - >巴黎 - >紐約 - >倫敦」?)。行程有一個價格。價格不是腿的價格的總和,因爲回程旅行比兩種方式便宜。

Itinerary 
--------- 
ID 
Price 

Leg 
---- 
Departure Airport : FK into airports 
Arrival Airport : FK into airports 
Departure timestamp (in departure city's local time) 
Arrival timestamp (in arrival city's local time) 
flight duration of this airleg: static value 
flightId : FK into airlines yielding airline name and flight number 
Baggage Policy : text 
Misc (TEXT: Cancellation policy) 

你可以存儲價格在一個單獨的表 - 但是你只需要當價格變動獨立的行程要做到這一點(例如,如果在週一的價格爲$ 100,並於週二是200 $)。

我鼓勵你在你的數據庫模式中不要使用「magic numbers」 - 而不是將返回段設置爲「-1」,你應該把它留空 - 沒有回程。這使得你的SQL更容易閱讀,並且更不容易出錯 - 你不需要開發人員記住「-1」意味着沒有返回腿,-2意味着有臨時預訂的腿等。

+0

我也有一個多部分行程作爲用例。我需要支持三種類型的行程:a)單向行程b)往返行程c)多部分行程。你對這個事實是正確的,即「行程」有價格,而不是單個的腿。我從這裏收集了來自不同事實的解決方案:http://stackoverflow.com/a/9018830/280924。讓我知道你的想法。謝謝.. – brainydexter

相關問題