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)。我有另一个定价表,它定义了这个id从startDate到endDate的价格

我的行程表只能代表单程旅行的信息。如何模拟往返行程

解决这一问题的一种方法是:

表中还有一列: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
我想听听关于这个设计的想法/建议

编辑:

我增加了一个相关的问题,我认为这个问题的答案必须满足这两个要求

有一件事,我想提一提的是..往返的价格是指定为一个单位,而不是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