|
|
1
1
如果FK字段引用同一表中两个字段的不同集合,那么这表示一个自联接。例如,如果一个雇员表有一个复合主键(例如divisionID和employeeID,其中employeeID在每个部门中都是唯一的),那么您希望让每个雇员记录标识雇员的主管-作为同一表中的另一行。 然后,每个记录都必须有一个复合的foreignkey(supervisordivisionid,supervisorid),以便识别员工的主管。 如果这两个FK字段引用了它们自己,那么这是没有正当理由的,因为这样的约束结构将永远是satisiefd(它不能是false)。因此毫无意义。 |
|
|
2
1
我相信我已经找到了原因,而在我看来,这是微软人一个非常糟糕的设计决策。 我去创建一个新的外键,并设置主键表和外键表及其列。然后我意识到在创建外键之前需要清除表中的数据,所以我单击了关闭。我发现这会创建一个挂起的外键,正如我在问题中描述的那样,一个由引用自身的主键字段组成的FK。 所以我可以合理地猜测,在这5个表上的某个时刻,我开始创建一个fk,我认为我在单击“关闭”时中止了该操作,然后对表进行了另一个更改,例如添加字段或更改数据类型,然后在保存表时,我意外地创建了一个fk。我可能会补充说,这是一个FK的参数我从来没有设置。 我认为这是一个错误。 编辑:我刚刚发现它实际上比我描述的还要糟糕。即使单击“创建外键”对话框上的“取消”按钮,它仍会在挂起状态下创建自引用外键。这太愚蠢了。 编辑2:我调查的越多,情况就越糟。我只是通过关闭SSMS并单击“保存更改”对话框上的“否”来保存这些自引用FK中的一个。我重新打开SSMS,并且无论如何都创建了自引用FK。简单回顾一下,我在CreateFK对话框中单击了Cancel,在SaveChanges对话框中单击了No,它用我从未设置过的参数创建了一个外键。 |