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

时间:2012-07-24 16:57:42

标签: sql foreign-keys

我有一个案例,其中DB设置有(简化)表User和表SuperUser。两者都有列Id。每个SuperUser行在User表中都有一行具有相同的Id值(不是我的设计!!!)。 SUperUser表不会从User表中提取公共信息,它会复制它。

可以/应该指向User.Id的任何外键与SuperUser.Id都有FK:PK关系吗?我对此的看法是,它至少是一个非常糟糕的主意,许多(大多数?)DB不能强制执行这种关系/

我离开基地吗?

2 个答案:

答案 0 :(得分:2)

根据我对您的问题的理解,使用设置为User和SuperUser表的外键会遇到两个主要问题。

  1. 除非用户在两个表中,否则您将无法输入或更新任何外键设置的表,因为外键需要在两个表中都存在用户ID。

  2. 如果您设置了带有级联删除的外键并从SuperUser中删除了一条记录,则所有具有该设置的表将删除与该用户ID相关联的记录,从而可能只留下User表中的记录和所有其他信息丢失。

  3. 什么是更好的选择是将SuperUser表中的userid列设置为User表中userid列的外键,这样就不会遇到用户不在两个表中或删除的问题来自SuperUser表的用户。

答案 1 :(得分:1)

由于每个用户在用户表中都有一条记录,并且我假设不是每个用户都是超级用户,我只想用户引用它们,并在需要时检查它们是否是超级用户。

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