【问题标题】:Does it ever make sense to have more than one foreign keys between two tables在两个表之间有多个外键是否有意义
【发布时间】:2018-12-24 19:20:02
【问题描述】:

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

【问题讨论】:

  • 你为什么要这样做?

标签: sql database foreign-keys


【解决方案1】:

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

下面是一个示例:错误跟踪数据库中的一个表,它引用了三个不同的用户。报告错误的用户、被指派修复错误的工程师和被指派验证错误已修复的测试人员。

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 之间的关系
  • 谢谢!这真的很有帮助。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2012-05-24
    • 1970-01-01
    • 2017-01-23
    • 1970-01-01
    • 1970-01-01
    • 2021-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多