多对多关系的实际效用
现在,就绪的对象模型可以很好地模拟真实世界。我一年中要经历许多旅行,经历许多不同的航空公司,飞往许多不同的机场。将所有这些关系联系起来的就是一个 Flight。
查看一下底层数据库,我只看到了期望看到的表,如清单 7 中的 MySQL show tables 命令的输出所示:
清单 7. 底层数据库表
mysql> show tables;
+----------------+
| Tables_in_trip |
+----------------+
| airline |
| airport |
| flight |
| trip |
+----------------+
+----------------+
| Tables_in_trip |
+----------------+
| airline |
| airport |
| flight |
| trip |
+----------------+
airline、airport 和 trip 表中的所有列均与对应的域类中的字段匹配。flight 是连接表,表示其他表之间的复杂关系。清单 8 展示了 Flight 表中的字段:
清单 8. Flight 表中的字段
mysql> desc flight;
+----------------------+--------------+------+-----+
| Field | Type | Null | Key |
+----------------------+--------------+------+-----+
| id | bigint(20) | NO | PRI |
| version | bigint(20) | NO | |
| airline_id | bigint(20) | YES | MUL |
| arrival_airport_id | bigint(20) | NO | MUL |
| arrival_date | datetime | NO | |
| departure_airport_id | bigint(20) | NO | MUL |
| departure_date | datetime | NO | |
| flight_number | varchar(255) | NO | |
| trip_id | bigint(20) | YES | MUL |
+----------------------+--------------+------+-----+
+----------------------+--------------+------+-----+
| Field | Type | Null | Key |
+----------------------+--------------+------+-----+
| id | bigint(20) | NO | PRI |
| version | bigint(20) | NO | |
| airline_id | bigint(20) | YES | MUL |
| arrival_airport_id | bigint(20) | NO | MUL |
| arrival_date | datetime | NO | |
| departure_airport_id | bigint(20) | NO | MUL |
| departure_date | datetime | NO | |
| flight_number | varchar(255) | NO | |
| trip_id | bigint(20) | YES | MUL |
+----------------------+--------------+------+-----+
用于创建新 Flight 的搭建的 HTML 页面为所有的相关表提供了组合框,如图 1 所示:
图 1. 用于添加航班而搭建的 HTML 页面
