【问题标题】:Can't set a foreign key between 2 tables无法在 2 个表之间设置外键
【发布时间】:2015-06-07 02:24:48
【问题描述】:

我有 2 张桌子:

Clients
-------
(PK)id
family
name
...
(PK)idprovincia
(PK)idsesion


Brothers
--------
(PK)id
(PK)idclient
name

我想在 Brothers 和 Clients 之间设置一个外键。我的意思是,一个客户端可以有几个兄弟,但 SQL Server 不允许我这样做。

但是我可以将 idprovincia 和 idsesion 设置为 PROVINCIAS 和 SESIONES(我没有指定的其他表,因为它们没有问题)

我还尝试将 idclient 设置为 UNIQUE,但又一次,SQL Server Management Studio 不允许我创建外键。

我该如何管理?

谢谢

【问题讨论】:

  • 我认为你的问题是你试图做一个包含外键的复合键。看看这个:stackoverflow.com/questions/8575046/….
  • “如果你引用一个复合主键,你的外键也需要包含所有这些列 - 所以你需要类似的东西”,意味着你不能将 idsession 或 idprovincia 也作为主键,因为它们不是 Brothers 表中的外键。
  • 也许你应该发布错误信息
  • 您是否必须将所有这些列设置为主键?您已经有一个 ID 列。
  • (PK)idclient 在 Table Brothers 中应该是 FK,并且不应该是唯一的。客户表中的 PK id 是可以的:该表中的其他字段对这个问题无关紧要:只需应用唯一约束但不要使它们成为 PK。最好的问候,

标签: sql-server foreign-keys unique primary-key entity-relationship


【解决方案1】:

对您的问题的简短回答:

客户

(PK)id - identity field, auto-incremented
family
name
...
idprovincia (could have unique constraints or not - doesn't matter in this case)
idsesion (could have unique constraints or not - doesn't matter in this case)

兄弟们

(PK)id - identity field, auto-incremented
(FK)idclient (not unique as it participates in One-to-Many relationship)
name

还要确保 PK/FK 使用相同的数据类型。

希望这会有所帮助。

【讨论】:

  • 嗨,我将 idprovincia 设置为 pk,因为它可以是唯一的,因为您在上面的评论中所说的原因并将 idsession 设置为唯一。但是我需要将 idclient 设置为 pk 因为它可以重复。但是我得到了同样的结果......我不知道该怎么办。
  • 其实我说的反之亦然:不要将每个唯一字段都设置为 PK。在这种非常简单的一对多类型的关系中,每个表应该只有一个 PK。不要将 idclient 设置为既不是 PK 也不是唯一的:它是一个 FK(它们可能是此列中的重复值,因此不要将唯一约束应用于此字段)。希望这会有所帮助。最好的问候,
  • 但是亚历克斯,也许我错了,但如果我没有将 idcliente 设置为 PK 或 UNIQUE,我无法在其上创建外键。对不起我的无知男人
  • 不,您在两个表之间创建了一对多关系,其中客户端位于“一”侧,并且具有 PK id 和兄弟(在“多”侧),其中 idclient 字段用作FK。它确保了引用完整性,这意味着 Brothers 表可能有许多具有相同客户端 ID 的行,这些行保证存在于第一个表中。问候,
  • 最后我做到了,我错了,因为我认为我需要两个相关成员都必须是主要的或主要的和唯一的,但是当我阅读您的 cmets 时比预期的要容易。
【解决方案2】:

外键约束是创建零到多基数,以确保具有第一个表的主键的第二个表具有每个主键的数据。 例如:电子商务数据库中的客户 ID 在客户表中充当主键,在订单表中称为外键。一个客户在订单表中可以有 0 到 n 个订单。在这里,外键可确保客户与他所下的每个订单相关联。

至于你的桌子:-

客户:

(PK) client_Id - autogen 姓 .. 兄弟们:

(PK) Brother_Id - autogen (FK) client_Id 姓氏

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-12
    • 2017-05-08
    • 2021-06-13
    • 2012-06-25
    • 2017-02-20
    • 1970-01-01
    • 2019-02-16
    相关资源
    最近更新 更多