在我的项目中,我有一部分说-
航空公司有很多航班 并且每个航班都有一个来源(机场)和一个或多个目的地(机场)。对于每个源目的地对,您必须记录 距离 。
根据此声明,我已经做了一个erd-
_________
| Airline |
---------
|
has
____|____
| Flights |
---------
/ \
s.has d.has
_______/______ ______\_______
|source_airport| | dest_airport |
-------------- --------------
现在我对最后一个属性 distance 有疑问。我应该如何将其与上面的erd放置在一起?
或者,我认为机场将是一个实体,其中航班和机场之间将具有关系。但是,如果发生这种情况,那么如何区分它们之间的 source 和 目的地 部分,以及使用< strong> 距离 属性?
答案 0 :(得分:1)
评论太久。您可以使用两个表来表示给定的航班,一个表用于位置,另一个表用于将一个位置与另一个位置相关联的联结表。
CREATE TABLE locations (
id INT NOT NULL PRIMARY KEY,
name VARCHAR NOT NULL,
latitude DOUBLE NOT NULL,
longitude DOUBLE NOT NULL
);
CREATE TABLE flights (
source_id INT NOT NULL,
dest_id INT NOT NULL,
PRIMARY KEY (source_id, dest_id),
FOREIGN KEY (source_id) REFERENCES locations(id),
FOREIGN KEY (dest_id) REFERENCES locations(id)
);
因此,现在航班只是flights
联结表中的一个条目。每个机场的元数据都位于locations
表中。