Database 如何设计回程行程与单程行程
我不太确定如何解决这个问题:Database 如何设计回程行程与单程行程,database,database-design,data-modeling,entity-relationship,erd,Database,Database Design,Data Modeling,Entity Relationship,Erd,我不太确定如何解决这个问题: 单程旅行的价格与往返旅行的价格不同 在后端,我有一个用于存储行程的表(它生成一个id)。我有另一个定价表,它定义了这个id从startDate到endDate的价格 我的行程表只能代表单程旅行的信息。如何模拟往返行程 解决这一问题的一种方法是: 表中还有一列:returnId 如果returnId=-1->单向行程 其他的 returnId=其免费行程的id 例如。 A->B是往返行程,C->D是单程行程 它看起来像这样: Id | Departur
- 单程旅行的价格与往返旅行的价格不同
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
我想听听关于这个设计的想法/建议
编辑:
我增加了一个相关的问题,我认为这个问题的答案必须满足这两个要求
有一件事,我想提一提的是..往返的价格是指定为一个单位,而不是a->B和B->a之间的单个组件
类似地,如果一次旅行中有多个航段,那么价格是为整个旅行定义的,而不是为单个航段定义的。与其添加这样的自联接,不如创建一个旅行表,其中包含旅行到行程的一对多映射(其中一次旅行包含多个行程)。这样,一次旅行可以有两条腿以上 比如:
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
为了得到旅行的总价格,将两个答案混合在一起,得出以下结论: 旅程:
- 游程ID
- 行李政策
- 杂项
- 节段ID
- 日记ID(FK)
- 段信息
- 游程ID
- 起始日期
- 结束日期
- 价格
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
价格
想法?你能在@gbn澄清与上一个问题的区别吗?你链接到这个页面本身了吗?我的意思是,它们是重复的吗?它们不是重复的,但我认为将两者链接起来是值得的,因为我提出的解决方案必须同时支持这两种用例。@gbn修复了。添加了链接。我想我也会在这里交叉链接这个问题。A->B的往返不返回200吗?从编辑中的链接,我想我喜欢分割:。这和你的建议很相似。我会尽量把你的两个回复混合在一起,然后发布一个答案。@brainydexter:我以为你是在问每段旅程的个别价格。如果不是,则只需将定价表的键设为=TripId而不是TravelyID。我可能会提出类似于链接答案的建议,但我假设您有一个现有的固定行程和定价表,并且必须解决这些问题-汉克斯。我已经按照您的建议在下面给出了一个答案。我会将开始/结束日期移动到旅程表上,因为它们与价格无关,并且还会将出发/到达添加到分段表上……我们是否应该使用视图来代替开始/结束日期,如另一个答案中所建议的那样?同意,用于在区段表中添加出发/到达日期。如果完全删除srart/end,并将出发/到达添加到区段,则可以这样做。。是否使用视图取决于查询数据的方式。我将用hibernate/java连接这些。我对冬眠还不熟悉,所以我不知道该怎么做。但是,是的,我们的想法是确定旅行的开始/结束日期和价格。
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