以下是我的表格的总体布局:
order
表。reservation
表连接到train
和一个或多个tickets
。train
表,用于保存火车的信息,还有一个ticket
表,用于表单。我想要添加到系统的是返程票的概念,用户要求提供双程票。由于这些票有两个座位和票号等,我将不得不创建新票。火车也是如此;由于回程列车的信息不同,我将不得不创建两列火车:一列用于始发列车,另一列用于返回列车。
这使我得出结论,这些实际上是两个不同的保留(它们也需要两次调用底层API)。换句话说,当有人购买双程票时,我需要创建两个预订,这两个预订连接到两个不同的列车,这些列车连接到与原始预订相同的票。
当我想将这两个预订连接在一起时,问题就开始了。我正在寻找一个策略,让我知道这个预订是什么样的预订(起点与退货),以及其他预订是什么。例如,如果当前预订的ID为4
并且是原始预订,我希望能够找到ID为5
的预订,即预订。
以下是我的想法和每个问题。
originating_reservation_id
和return_reservation_id
这是最简单的,但我认为是最糟糕的解决方案。在这种情况下,我将这两列添加到reservation
表中。如果originating_reservation_id
已填写,则此reservation
为return
预订,否则为origination
预订。明显的缺点是你获得了单程票的很多null
值。
在这种情况下,我会有一个包含type
字段,first_reservation_id
和second_reservation_id
的表格。类型可以是origination
,这意味着first_reservation_id
是起源,second_reservation_id
是返回。我也会在这个表中有另一行,这是相反的,这意味着对于每个双向票证,在此表中创建了两行。除了我为每个双向预留需要两行之外,布局似乎不直观。
我在这里缺少什么?
答案 0 :(得分:2)
这个问题最好通过添加另一个级别来解决,而不是在同一级别进行两次预留。
有一个存储每个预订的旅程表和一个 leg 表,用于存储属于该预订的每个旅行。旅程和腿有一对多的关系。单程旅行只有一条腿,返回会有两条腿。
除了解决问题之外,这还有其他好处。