我如何设计回程旅行行程与单程行程

时间:2012-01-26 12:06:42

标签: database database-design data-modeling entity-relationship erd

我不太确定如何解决这个问题:

  • 单程旅行的价格与往返行程的价格不同。

在后端,我有一个用于存储行程的表(产生一个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的单个成分。

同样,如果旅行中有多个段,则为整个行程定义价格,而不是单个段。

2 个答案:

答案 0 :(得分:1)

我没有像这样添加自联接,而是会有一个Trip表,其中包含Trip to Itinerary的一对多映射(其中1行包含多个行程)。这样,旅行可以有两条以上的腿..

类似的东西:

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

获得旅行的总价格..

答案 1 :(得分:0)

将两个答案混合在一起并提出来:

<强>旅

  • journeyId
  • 行李政策
  • 杂项

<强>段

  • segmentId
  • journeyId(FK)
  • 细分信息

<强>价格

  • journeyId
  • 的startDate
  • 结束日期

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

想法?