我在学习sqlalchemy时注意到,外键关系是通过关联表名而不是标识连接两个表的实际外键来定义的,所以我在想,如果两个表之间有多个外键(如果有意义的话)。sqlalchemy将无法确定用于链接这两个表的键。不管怎样,我的问题是:在两个表之间有多个外键有意义吗

最佳答案

是的,在某些情况下,表可以有多个外键指向父表的不同行。
下面是一个例子:bug跟踪数据库中的一个表,它引用了三个不同的用户。报告错误的用户、指定修复错误的工程师和指定验证错误的测试人员。

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),
  ...
);

如果每个用户可能是不同的人,则需要为每个用户提供不同的外键。
这里是另一个例子:一个shipping应用程序跟踪每一批货物并记录来源国和目的地国。
CREATE TABLE Shipments (
  ...
  origin_country INT NOT NULL REFERENCES Countries(country_id),
  destination_country INT NOT NULL REFERENCES Countries(country_id),
  ...
);

10-01 18:03
查看更多