数据库的ER图如下:
现在,飞机和航班实体之间的关系是什么?
我会说一对多,但这是错误的,因为虽然一架飞机可以有多个航班,但许多航班不能同时有一架(单)飞机。
那么,究竟是什么关系呢?
我是数据库新手。如果我错了,请告诉我。
数据库的ER图如下:
现在,飞机和航班实体之间的关系是什么?
我会说一对多,但这是错误的,因为虽然一架飞机可以有多个航班,但许多航班不能同时有一架(单)飞机。
那么,究竟是什么关系呢?
我是数据库新手。如果我错了,请告诉我。
首先,您的图表不是 ER 图,而是表格图。ER 图必须能够表示 ER 模型,它支持三元和更高的关系、弱实体集和标识关系以及其他表图没有符号的概念。正确的 ER 图符号通常称为陈氏符号。
现在,通过查找出现在同一个表中的实体域(标识实体集的列),可以轻松识别 ER 关系。这些通常由 PK 和/或 FK 表示,但不一定如此。
当您有二元关系(同一个表中有两个实体域)时,请查看这些域上的唯一约束:
一对一关系需要两个单独的唯一约束,每个域一个。
一对多关系需要对多方域的唯一约束。
多对多关系需要对两个域一起使用复合唯一约束。
一对多关系可以非规范化为多方实体的实体关系,因为关系所需的唯一约束与实体关系的 PK 相匹配。一对一关系可以非规范化为任一实体关系。多对多关系需要复合键,并且必须表示为单独的关系,因为复合键与任一实体关系的 PK 都不匹配。
在您的示例中,(flight_num, planeID)
表示关系,并且由于 onlyflight_num
是唯一受约束的(由于是flights
关系的 PK),因此这是一个多对一的关系:每个航班都与一架飞机相关联,而每个飞机都可以参与在许多航班中。
这是一个视觉参考,其中独特的约束用下划线表示:
许多人仍然使用旧网络数据模型中的术语和概念,例如将关系与 FK 约束和实体集与表混为一谈(这就是为什么表图经常被错误地称为 ERD)。我强烈推荐阅读 Codd 的论文“A Relational Model of Data for Large Shared Data Banks”和 Chen 的论文“The Entity-Relationship Model - Toward a Unified View of Data”。
正如您所说的关系是一对多,因为如果它是多对多关系,则它必须在这两个表(Tbl_Plane_Flight)之间有一个联结表,另一件事是在航班表中引用了 Plane_Id。
但是这种关系必须有一个验证规则(或航班表中的一个约束),即一架飞机不能同时有多个航班