0

我不太知道如何處理這個問題:我怎麼回設計旅遊行程VS單程行程

  • 價格爲單程旅行比價格往返路線不同。

在後端,我有一個表用於存儲行程(產生一個id)。我有另一個定價表,它定義了從startDate到endDate這個ID的價格。

我的行程表只能表示單向旅行的信息。我如何模擬往返行程?對付這種

一個辦法是:

在表中的另一列:returnId

如果returnId = -1 - >單程 否則 returnId = id來的免費行程

例如 A→B是往返行程& C→D是單程行程;

這將是這個樣子:

Id | Departure | Arrival | ReturnId 
1  | A   | B   |  3 
2  | C   | D   |  -1 
3  | B   | A   |  1 

在這種情況下價格表

Id | StartDate | EndDate | Price 
1  | Jan 1, 2012 | Dec 10,2012|  150.00 
3  | Jan 1, 2012 | Dec 10,2012|  150.00 
2  | Jan 1, 2012 | Dec 10,2012|  100.00 

我想聽聽這個設計思路/建議嗎?

編輯:

我加了一個相關的question,我認爲回答這個問題,必須同時滿足的要求。

有一件事,我想提到的是,往返行程的價格被指定爲一個單位,而不是來自A-> B和後面的單個組件,B-> A。

同樣,如果行程中有多個段,則定義整個行程的價格而不是單個段。

+0

你能澄清一下你以前的問題嗎?請在http://stackoverflow.com/questions/9017881/how-do-i-design-return-travel-itinerary-vs-one-way-itinerary – gbn

+0

@gbn你鏈接到這個頁面本身? – brainydexter

+0

我的意思是這個http://stackoverflow.com/questions/9017733/how-do-i-design-intermittent-via-points-for-travel-itinerary就是說,它們是重複的嗎? – gbn

回答

0

混合的兩個答案,並想出了這個:

之旅

  • journeyId
  • 行李政策
  • 其它

  • segmentId
  • journeyId(FK)
  • 段信息

價格

  • journeyId
  • 的startDate
  • endD吃
  • 價格

之旅

Jid | baggage    | misc 
1 | "baggage policy1" | "round trip A->B" 
2 | "baggage policy2" | "one-way C->D" 
3 | "baggage policy3" | "one-way E->H with a hop in F, followed by G to H" 

Id | Jid | Dep | Arrival 
1 | 1 | A | B 
2 | 1 | B | A 
3 | 2 | C | D 
4 | 3 | E | F 
5 | 3 | F | G 
6 | 3 | G | H 

價格

JourneyId | StartDate | EndDate | Price 
1   | Jan 1, 2012 | Dec 10,2012|  150.00 
3   | Jan 1, 2012 | Dec 10,2012|  150.00 
2   | Jan 1, 2012 | Dec 10,2012|  100.00 

的思考?

+0

我會將開始/結束日期移到旅程表上,因爲它們與價格無關,並且還會在分段表中添加離開/到達... – StevieG

+0

我們不應該使用視圖來代替開始/結束日期,正如在其他答案中所建議的那樣?同意,在分段表上添加離港/到港日期。 – brainydexter

+0

如果你完全刪除srart /結束,並添加離開/到達段,那麼是的,你可以做到這一點..無論你使用一個視圖或不取決於你將如何查詢數據.. – StevieG

1

與其添加一個像這樣的自連接,我會有一個Trip表,其中包含Trip to Itinerary的一對多映射(其中1行包含多個行程)。這樣,一趟可以有2周以上的雙腿..

喜歡的東西:

Trip_Itineraries 
TripId  | ItineraryId 
1   | 1 
1   | 2 
2   | 3 

Itinerary 
ItineraryId | Departure | Arrival 
1    | A   | B  
2    | B   | A  
3    | C   | D 

Pricing 
ItineraryId | StartDate | EndDate  | Price 
1    | Jan 1, 2012 | Jul 10,2012 | 100.00 
2    | Jul 1, 2012 | Dec 10,2012 | 100.00 
2    | Jul 1, 2012 | Dec 10,2012 | 150.00 

然後,你可以這樣做:

SELECT T.TripId, sum(P.price) 
FROM Trip_Itineraries T INNER JOIN Pricing P ON T.ItineraryId = P.ItineraryId 
GROUP BY T.TripId 

獲得總價爲旅行..

+0

A→B的往返不會返回200嗎? – brainydexter

+0

請參閱編輯。我在問題中更新了更多信息。 – brainydexter

+0

從該編輯中的鏈接中,我想我喜歡拆分:http://stackoverflow.com/a/9017790/280924。這與你的建議類似。我會盡量將你的答覆和發佈答案混合起來。 – brainydexter