数据库设计可存储飞行路线成本

时间:2019-05-14 18:06:19

标签: mysql database-design

我想创建一个数据库来存储飞行路线以及每条路线的成本。到目前为止,这是我目前的设计

+---------+---------+------+
| start   | dest    | cost |
+---------+---------+------+
| Chicago | NY      |  250 |
| Denver  | Chicago |  250 |
| Denver  | NY      |  400 |
| Denver  | SF      |  250 |
| SF      | Chicago |  550 |
| SF      | Denver  |  300 |
| SF      | NY      |  700 |
+---------+---------+------+

使用此设计,获取成本价的查询将非常简单。例如:

select cost from routes where start = 'SF' and dest = 'NY';

但是我必须定义每个“目标”的每个“开始”来获取成本。 如果要存储1000个机场,那么1000个航空公司和每个机场都是相连的。那么也许它将存储成百万个数据?而且查询会很繁琐。

是否还有其他设计来存储飞行路线,所以我不必存储数百万个数据?

谢谢

2 个答案:

答案 0 :(得分:0)

您可以制作路线,航空公司和联接表的表。最终,第3个表将有很多记录,但是id应该表现得更好。

Routes
+----+---------+---------+
| id | start   | dest    |
+----+---------+---------+
|  1 | Chicago | NY      |
|  2 | Denver  | Chicago |
|  3 | Denver  | NY      |
|  4 | Denver  | SF      |
+----+---------+---------+

Airlines
+----+-----------+
| id | name      |
+----+-----------+
|  1 | American  |
|  2 | Delta     |
|  3 | Southwest |
|  4 | Denver    |
+----+-----------+

AirlineRoutes
+------------+----------+------+
| airline_id | route_id | cost |
+------------+----------+------+
| 1          |  1       |  250 |
| 1          |  2       |  250 |
| 2          |  1       |  400 |
+------------+----------+------+

答案 1 :(得分:0)

“真的很简单”-哦?我看到三种从旧金山到纽约的方式:

  • 旧金山直飞纽约,
  • SF->丹佛->纽约,
  • SF->芝加哥->纽约

另外,我看到一种进入循环的方法(SF-> Denver-> SF-> ...)。

我怀疑用于此目的的算法最好使用应用程序语言而非SQL来完成。

根据Google的资料,全球每天有102465趟航班。您的表可以在这么多行中正常工作。

但是,我将对机场(SFO,ORD等)和航空公司使用标准代码。然后,如果需要,可以使用另一个表查找全名。