机票和航班的多对多关系:
- 一张机票可以包含多个航班(比如你买了一张从北京到纽约的机票,中间需要在伦敦转机,那么这张机票实际对应两个航班:北京 → 伦敦 和 伦敦 → 纽约)。
- 一个航班上可以有多个机票(比如北京 → 伦敦这趟航班上有 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 |
现在,有两个乘客:
- 张三 购买了一张从 北京 → 纽约 的联程机票,需要先飞 北京 → 伦敦,然后再转机 伦敦 → 纽约。
- 李四 购买了一张 上海 → 纽约 的直飞机票。
他们的 机票信息(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
这张表,就会有 两种问题:
- 无法支持联程航班(张三的机票
T001
需要绑定两个航班,tickets
里没法存两个flight_id
)。 - 无法记录不同航班的票价、舱位(张三的
T001
机票在第一个航班上可能是经济舱,在第二个航班上可能是商务舱)。
总结
✅ 为什么一张机票可以对应多个航班?
- 因为联程票的存在,比如北京 → 纽约需要先到伦敦再转机,所以一个机票需要绑定多个航班。
✅ 为什么一个航班可以有多个机票?
- 因为每个航班都有多个乘客,每个乘客都会有自己的机票。
✅ 为什么 ticket_flights
表是必须的?
- 它用来管理机票和航班的多对多关系,让我们可以支持联程航班,并记录票价和舱位信息。
这样设计后,系统既可以支持直飞航班(单一航班),也可以支持转机航班(多个航班)。🚀