我不太确定如何解决这个问题:
在后端,我有一个用于存储行程的表(产生一个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 :(得分: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)
将两个答案混合在一起并提出来:
<强>旅强>:
<强>段强>:
<强>价格强>:
旅
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
想法?