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

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

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

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


用数值举例详细说明

假设有以下航班:

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

现在,有两个乘客:

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

他们的 机票信息(tickets 表)

机票号乘客 ID乘客姓名
T001P12345张三
T002P67890李四
机票和航班的绑定关系(ticket_flights 表)
机票号航班 ID舱位票价
T001101经济舱3000
T001102经济舱4000
T002103商务舱9000

如何理解这个关系?

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

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

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

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

总结

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

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

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

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

为什么 ticket_flights 表是必须的?

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值