Sql 在两个表之间有多个外键有意义吗

Sql 在两个表之间有多个外键有意义吗,sql,database,foreign-keys,Sql,Database,Foreign Keys,我在学习Sqlalchemy时注意到,外键关系是通过关联表名来定义的,而不标识连接两个表的实际外键,因此我在想,如果两个表之间有多个外键(如果有意义的话),sqlalchemy将无法确定用于链接两个表的键。无论如何,我的问题是:在两个表之间有多个外键有意义吗是的,在某些情况下,一个表可以有多个外键指向父表的不同行 下面是一个示例:bug跟踪数据库中的一个表,它引用了三个不同的用户。报告错误的用户、负责修复错误的工程师以及负责验证错误是否已修复的测试人员 CREATE TABLE Bugs (

我在学习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),
  ...
);
如果这些用户中的每个人可能是不同的人,那么您需要为每个人指定一个不同的外键

下面是另一个示例:装运应用程序跟踪每批装运,并记录原产国和目的国

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

您应该知道一个表可以有多少主键,这是一对一的表表示。因此,两个表之间可以有一个外键作为另一个表的唯一非空主键的表示。 但这并不意味着一个表只能有一个外键
外键可能是一个表中的多个表到多个表的主键。

为什么要这样做?谢谢@Bill Karwin用于正确识别2对1关系中外键与主键之间的多对一关系谢谢!那真的很有帮助。