【问题标题】:ERD for airports and routes database机场和航线数据库的 ERD
【发布时间】:2014-04-27 17:39:37
【问题描述】:

我正在设计一个机场数据库以及它们如何通过路线相互链接。 Idea 是openflights 的简单版本。

这是我的 ERD:

它有四个实体,即:机场、航线、航空公司和飞机。关系如下:机场和航线之间的二元关系(出发地和目的地),航空公司服务于该航线,最后航空公司有一架飞机通常用于该航线。

我不确定所涉及的实体及其关系的有效性。如果有人能指出我的错误,那就太好了。

【问题讨论】:

  • 我没有看到飞机和路线之间的联系。大约 10 年前,我为一家航空公司做了一个 ER 模型,如果我没记错的话,一条路线可以由几条腿组成,每条 leg 都有一个起点和终点。但也许对于您的用例,您不需要为中间停靠点建模
  • 飞机和航线应该有什么联系?我正在寻找一个更简单的数据库版本,其中包含机场和路线的信息或它们之间的链接以及覆盖该路线的航空公司,所以现在我不考虑中间站点。不过,我非常感谢您的好意建议,在完成初始模型后,我会继续努力。

标签: database database-design entity-relationship


【解决方案1】:

我不会称之为路由表。

路线有航路点和路线,可能会发生变化。例如,从 KFJK 到 KORD 的路线是 COATE Q436 EMMMA WYNDE5(这些是航路点,WYNDE5 是到达奥黑尔)。

您的图表更像是一个目的地表。大多数航班都是单程(“直达”)航班,对于多程航班,您需要单独跟踪这些航班。

我会跟踪航班(具有唯一编号)而不是您的“路线编号”变量。一个航班可以由不同的设备飞行。例如,同一航班可以乘坐 777 或 A380。

许多航空公司飞行相同的航线,但使用不同的航班;每个航班包含以下内容:

  1. 唯一编号
  2. 机型
  3. 原产地
  4. 目的地(可以是多个或中间)。

飞行路线是预定义的。查看肯尼迪国际和芝加哥奥黑尔之间的航班this table

如果您点击 ident 列(这是航班号),您将看到该航班的飞行路线。

我会做出以下改变:

  1. 从飞机表中删除“速度”;并将此表重命名为“设备”。
  2. 将“alias”重命名为“ICAO”,并在此处添加其 ICAO 代码(三个字母)。
  3. 航空公司没有航线;所以我会将路线重命名为“目的地”。
  4. 机场没有航线编号;所以我不确定那是在做什么。
  5. 机场有两个主要标识符,ICAO 标识符代码(4 个字母)和 IATA 标识符(3 个字母)。我会添加这两个。
  6. 我会将航线号重命名为“航班号”,然后将实际航班号添加到其中;每条腿单独输入。这将处理您的多段(多站)航班。
  7. 我会添加一个 flight_equipment 表,以便在每个航班之间建立一个链接,以及使用哪些设备。目前,航班和飞机之间没有联系。

【讨论】:

  • 所以你的建议是我应该有以下表格: Flight(UIN,Origin,Destination,Aircraft,Airline) Equipment(model,type,make,capacity) Airline(name,Origin,ICAO ) Airport(ICAO,IATA,name,address) flightequipment(flight,equipment) 这就是我得到它的方式,但我是业余爱好者,还在学习,所以我感谢你的帮助。您还可以就我的模式对多条腿进行更多说明。谢谢
【解决方案2】:

想到几个问题:

  • Route
    • 什么是are_NoDep_airDest_air
    • no_of_stops: 数量真的够吗,还是需要停站?
    • 为什么ends_adstarts_from会相交? (希望我没看错?)
  • airport
    • 为什么会有route_No
  • Routeairline
    • 这真的是M-M吗?即使使用相同的机场,每家航空公司也不会运营自己的航线吗?
  • airline
    • 什么是modelNo
    • no_of_planes:你已经隐式获取了这些信息,通常不需要再次存储。
    • aeroplane:这些是实际的飞机吗(例如,一家航空公司会有几架空客 A380?)。如果是这样,定义类型的附加表可能有意义。

一般:

  • 确保使用一致的命名:
    • 案例:Route vs airline
    • 避免缩写(个人意见):Dest_air vs destination_airport
    • 一致地使用下划线:modelNo vs route_No

编辑:由于您决定忽略中间止损,您的模型可能如下所示:

  • 航空公司
    • airline_id (PK)
    • 姓名、别名、...
  • airline_aeroplane
    • airline_aeroplane_id (PK)
    • airline_id (FK)
    • 型号、品牌、容量、...
  • 机场
    • airport_id (PK)
    • 姓名、城市、国家、...
  • 路线
    • route_id (PK)
    • route_number, number_of_stops, ...
    • departure_airport (FK)
    • destination_airport (FK)
  • airline_route
    • airline_id (FK) (PK)
    • route_id (FK) (PK)

【讨论】:

  • 我很确定 routeairline M:N 关系。航线由国家或国际航空协会定义(和分配)。多家航空公司可以飞行同一条航线。
  • 首先我是一个新手,如你所见,很抱歉没有遵循标准。 dep_air 应该是 dest_air 的出发机场和 destination_airport。航线和机场应该是什么关系?路线是否应该连接两个不同的机场实例,然后将路线链接到航空公司?寻找一些改进建议。
  • @a_horse_with_no_name:感谢您的洞察!
  • @PeterLang 请澄清这些:我认为您错过了 route_id 作为路线中的 PK,因为您在航空公司路线中将其用作 FK。机场与航线的关系。
  • airline_route 不需要人工PK。由于每家航空公司每条航线只能使用一次,所以该表的 PK 为airline_id, route_id。我会重命名airline_aeroplane,因为这个名字在某种程度上暗示了一种 M:N 关系(类似于airline_route)。我只会使用aeroplane,但我猜这是个人喜好。
猜你喜欢
  • 1970-01-01
  • 2017-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多