理解“机票和航班的多对多关系”

机票和航班的多对多关系:

  • 一张机票可以包含多个航班(比如你买了一张从北京到纽约的机票,中间需要在伦敦转机,那么这张机票实际对应两个航班:北京 → 伦敦伦敦 → 纽约)。
  • 一个航班上可以有多个机票(比如北京 → 伦敦这趟航班上有 200 个乘客,每个乘客都有一张机票)。

这就形成了一个 多对多 的关系:
一张机票可以绑定多个航班(联程票)
一个航班上可以有很多机票(多个乘客)


用数值举例详细说明

假设有以下航班:

航班 ID 航班号 出发地 目的地 出发时间 到达时间
101 CA123 北京 伦敦 2025-03-20 08:00 2025-03-20 14:00
102 CA456 伦敦 纽约 2025-03-20 16:00 2025-03-20 22:00
103 CA789 上海 纽约 2025-03-20 09:00 2025-03-20 19:00

现在,有两个乘客:

  1. 张三 购买了一张从 北京 → 纽约 的联程机票,需要先飞 北京 → 伦敦,然后再转机 伦敦 → 纽约
  2. 李四 购买了一张 上海 → 纽约 的直飞机票。

他们的 机票信息(tickets 表)

机票号 乘客 ID 乘客姓名
T001 P12345 张三
T002 P67890 李四
机票和航班的绑定关系(ticket_flights 表)
机票号 航班 ID 舱位 票价
T001 101 经济舱 3000
T001 102 经济舱 4000
T002 103 商务舱 9000

如何理解这个关系?

  • 张三的机票 T001 绑定了两个航班
    • 101(北京 → 伦敦)
    • 102(伦敦 → 纽约)
    • 他买的不是两张机票,而是一张机票上有两个航班
  • 李四的机票 T002 只绑定了一个航班
    • 103(上海 → 纽约)
    • 他买的是直飞机票,只需要一个航班

如果没有 ticket_flights 这张表会有什么问题?

如果我们直接在 tickets 表里加一个 flight_id 字段,而没有 ticket_flights 这张表,就会有 两种问题

  1. 无法支持联程航班(张三的机票 T001 需要绑定两个航班,tickets 里没法存两个 flight_id)。
  2. 无法记录不同航班的票价、舱位(张三的 T001 机票在第一个航班上可能是经济舱,在第二个航班上可能是商务舱)。

总结

为什么一张机票可以对应多个航班?

  • 因为联程票的存在,比如北京 → 纽约需要先到伦敦再转机,所以一个机票需要绑定多个航班。

为什么一个航班可以有多个机票?

  • 因为每个航班都有多个乘客,每个乘客都会有自己的机票。

为什么 ticket_flights 表是必须的?

  • 它用来管理机票和航班的多对多关系,让我们可以支持联程航班,并记录票价和舱位信息。

这样设计后,系统既可以支持直飞航班(单一航班),也可以支持转机航班(多个航班)。

你可能感兴趣的:(数据库,python,sql)