Sql 一个外键可以指向多个主键吗?

Sql 一个外键可以指向多个主键吗?,sql,foreign-keys,Sql,Foreign Keys,我有一个例子,数据库是用(简化)一个表用户和一个表超级用户建立的。两者都有一个列Id。每个超级用户行在用户表中都有一行具有相同的Id值(不是我的设计!!!)。超级用户表不会从用户表中提取公共信息,而是复制它 任何指向User.Id的外键是否也可以/应该与SuperUser.Id有FK:PK关系?我的看法是,这至少是一个非常糟糕的想法,许多(大多数?)星展银行无法加强这种关系/ 我在这里偏离基准了吗?根据我对您问题的理解,在用户表和超级用户表中设置外键时,您会遇到两个主要问题 除非用户在这两个表中

我有一个例子,数据库是用(简化)一个表用户和一个表超级用户建立的。两者都有一个列Id。每个超级用户行在用户表中都有一行具有相同的Id值(不是我的设计!!!)。超级用户表不会从用户表中提取公共信息,而是复制它

任何指向User.Id的外键是否也可以/应该与SuperUser.Id有FK:PK关系?我的看法是,这至少是一个非常糟糕的想法,许多(大多数?)星展银行无法加强这种关系/


我在这里偏离基准了吗?

根据我对您问题的理解,在用户表和超级用户表中设置外键时,您会遇到两个主要问题

  • 除非用户在这两个表中,否则您将无法输入或更新任何设置了外键的表,因为外键希望两个表中都有用户ID

  • 如果将外键设置为级联删除并从超级用户中删除记录,则所有设置了该外键的表都将删除与该用户ID关联的记录,这可能只会导致用户表中的记录以及所有其他信息丢失


  • 更好的选择是将超级用户表中的userid列设置为用户表中userid列的外键,这样您就不会遇到用户不在两个表中的问题,也不会从超级用户表中删除用户。

    根据我对您问题的理解,您会遇到两个主要问题为用户表和超级用户表设置外键时出现问题

  • 除非用户在这两个表中,否则您将无法输入或更新任何设置了外键的表,因为外键希望两个表中都有用户ID

  • 如果将外键设置为级联删除并从超级用户中删除记录,则所有设置了该外键的表都将删除与该用户ID关联的记录,这可能只会导致用户表中的记录以及所有其他信息丢失


  • 更好的选择是将超级用户表中的userid列设置为用户表中userid列的外键,这样您就不会遇到用户不在两个表中或从超级用户表中删除用户的问题。

    因为每个用户在用户表中都有记录,我假设不是这样每个用户都是超级用户,我只需要按用户引用他们,并在需要时检查他们是否是超级用户


    如果可能的话,最好删除重复的字段。随着事情的发展,这很容易成为一场噩梦

    因为每个用户在用户表中都有一条记录,并且我假设不是每个用户都是超级用户,所以我只会按用户引用他们,并在需要时检查他们是否是超级用户


    如果可能的话,最好删除重复的字段。随着事情的发展,这很容易成为一场噩梦

    您应该能够创建将同一字段连接到第二个表的附加约束。然而,这似乎是在自找麻烦。如果两个表之间存在1对1关系,这通常是因为其中一个表是可选的。用户表总是在那里,超级用户有时也在那里。如果是这种情况,则FK约束应仅基于用户表,而不是超级用户表。超级用户表应约束到用户表。您应该能够创建一个附加约束,将同一字段连接到第二个表。然而,这似乎是在自找麻烦。如果两个表之间存在1对1关系,这通常是因为其中一个表是可选的。用户表总是在那里,超级用户有时也在那里。如果是这种情况,则FK约束应仅基于用户表,而不是超级用户表。超级用户表应约束为用户表。