【发布时间】:2012-09-22 18:23:40
【问题描述】:
好的,这对你们大多数人来说可能是非常基本的,但我正在努力完成这项任务(是的,这是家庭作业)。我已经尝试了两次,到目前为止两次都失败了。
我需要在 Boyce Codd 范式中创建一个关系数据模型。 以下是详细信息:
一个小国的机场管理局需要一个数据库来存储 有关航空公司、飞行员和飞机的信息。
只有一个 机场,但有几家航空公司使用它。对于每家航空公司,其 手机需要识别码和全名 当地办事处的号码。几种类型的飞机使用机场和 每种类型的燃料容量和最大航程都要记录。
每位飞行员只为一家航空公司工作。对于每个飞行员,他们的名字, 出生日期、地址、他们可以乘坐的飞机类型及其 飞行员的执照号码将被记录。进一步的信息是 记录,以便生成列出以下内容的报告 使用机场的每架飞机的详细信息:飞机识别 代码、飞机类型、制造日期、所属航空公司。
这是我现在拥有的(重新设计后):
AIRLINES 表应包括:
ID,
Name,
Phone #
表 PLANES 应包括:
ID,
Date of Manufacture
Airline ID
FOREIGN KEY (Airline ID) references table AIRLINES
Plane Type ID
FOREIGN KEY (Plane Type ID) references table PLANE TYPE
PLANE TYPE 表应包括:
ID,
Maximum range,
Fuel capacity,
PILOTS 表应包括:
ID,
Name,
Date of Birth,
Address,
License #,
Airline ID,
FOREIGN KEY (Airline ID) references table AIRLINES
PilotPlaneID
FOREIGN KEY (PilotPlaneID) references table PILOTPLANETYPE
表 PILOTPLANETYPE 应包括:
PilotID
PlaneTypeID
FOREIGN KEY (PilotID) references table PILOT
FOREIGN KEY (PlaneTypeID) references table PLANE TYPE
根据我的标记,我在 Pilot 和 Plane Type 之间留下了多对多的关系。 有一些数据库设计知识的人可以帮帮我吗?
(编辑:现在使用 PILOTPLANETYPE 更新表格,我认为应该满足要求)?
【问题讨论】:
-
一种飞机的制造日期范围很广(可能是 20 年);一架飞机的制造日期可能与飞机的类型无关,而与具体的飞机有关。类似地,有许多航空公司使用特定类型的飞机,但特定飞机一次只能由一家航空公司飞行。因此,您有一些属性放错了位置。
-
好的,我已经更改了表格和属性。您认为现在应该可以使用吗?
-
非常接近;您可能想要记录 PilotID 和 PlaneTypeID 的组合是 PilotPlaneType 表的主键。您在 PlaneType 表中获得了最少的必要信息;我怀疑您可能想要一个制造商 ID(和制造商表来识别不同的制造商,与 PlaneType 具有 PK-FK 关系)和 PlaneType 表中的模型名称。简单地打印飞机类型编号可能就足够了,但可能还不够。
-
所以如果我将 PilotID,PlaneTypeID 设为组合键,我可以在不创建单独的主键的情况下从 PILOTS 表中将其作为 PilotPlaneID 引用吗?
-
您的四个表有一个 ID 列作为(单列)主键。 PilotPlaneType 表还应该有一个主键(说特定飞行员可以驾驶特定类型的飞机两次并不能使它更真实)。您的 Pilots 表确实需要引用 PilotPlaneType 表;您的 PilotPlaneType 表已经引用了 Pilots 表和 PlaneType 表(通过两个外键)。