在两个表之间具有多个外键是否有意义?

时间:2018-12-24 19:20:02

标签: sql database foreign-keys

我在学习Sqlalchemy时,发现外键关系是通过关联表名而定义的,而没有标识连接两个表的实际外键,所以我在想,如果两个表之间有多个外键(如果有意义的话),sqlalchemy将无法确定用于链接两个表的键。无论如何,我的问题是:在两个表之间具有多个外键是否有意义

2 个答案:

答案 0 :(得分:9)

是的,在某些情况下,一个表可以有多个外键指向父表的不同行。

这里是一个示例:错误跟踪数据库中的一个表,该表引用了三个不同的用户。报告了错误的用户,分配了修复错误的工程师以及分配了验证错误的测试人员已修复。

CREATE TABLE Bugs (
  bug_id INT PRIMARY KEY,
  reporter INT NOT NULL REFERENCES Users(user_id),
  assigned_to INT REFERENCES Users(user_id),
  verified_by INT REFERENCES Users(user_id),
  ...
);

如果每个用户可能都是不同的人,则每个用户都需要一个不同的外键。

这是另一个示例:一个运输应用程序跟踪每个运输并记录始发国家和目的地国家。

CREATE TABLE Shipments (
  ...
  origin_country INT NOT NULL REFERENCES Countries(country_id),
  destination_country INT NOT NULL REFERENCES Countries(country_id),
  ...
);

答案 1 :(得分:0)

您应该知道一个表可以有多少个主键,也就是一个表代表一个主键。因此,您可以在两个表之间使用一个外键来表示唯一的非空值(称为另一个)的主键。 但这并不意味着一个表只能有一个外键 一个表中的外键可能是多个表中的主键。