SQL Server Management Studio - 添加外键令人困惑?

tvr*_*tvr 44 sql sql-server ssms

我总是觉得在Management Studio中向主表添加外键会让人感到困惑.

可以说我有一个

Table1 
{
    ID int, -- Primary Key
    Table2ID int, -- Refers to Table2's ID 
}

Table2 
{
    ID int, -- Primary Key
    SomeData nvarchar(50)
}
Run Code Online (Sandbox Code Playgroud)

我正在向Table1添加一个外键Right Click -> Relationships -> Table and column specification.我将"主要"弹出窗口设置为Table2,ID和"外键表"到Table1,Table2ID.

我的问题:

  1. 不应该为"外键表"列出表2,为主键列出表1吗?我的理解错了吗?

  2. 当我保存时,我收到警告"以下表格将保存到您的数据库中." 它显示了两个表格.我真的不明白这一点.我只改变了Table1.为什么显示第二张表?

Zac*_*ach 104

  • 单击表旁边的展开符号.
  • 右键单击"Keys"文件夹,然后选择"New Foreign Key".
  • (或者,您可以在打开表格时单击工具条上的"关系"按钮)
  • 单击"表和列规范"行上的"..."按钮以打开编辑器.
  • 左侧的下拉列表将是您要添加的表格,静态文本字段将列出您要添加的表格.
  • 使用下拉列表指定约束,并确保双方具有相同的列数.

  • 问题是如何在 SSMS 中做到这一点。因此,这个答案得到了我的投票。 (2认同)

mar*_*c_s 22

你为什么不只使用等效的T-SQL语句?对我来说似乎更容易,更容易混淆:

ALTER TABLE dbo.Table1
  ADD CONSTRAINT FK_Table1_Table2
    FOREIGN KEY(Table2ID) REFERENCES dbo.Table2(ID)
Run Code Online (Sandbox Code Playgroud)

当我读到这篇文章时,我相信这很清楚两个表是什么,以及它们是如何连接的(Table1.Table2ID- (参考) - > Table2.ID)

如果你想留在SSMS设计师的世界:你还可以创建涉及的表的数据库图表,然后只需拖放您Table2ID从列Table1Table2拖放到ID列有-这将图形告诉SSMS你想做什么,您只需要查看您的选择,然后在弹出的对话框中单击"确定".


Ann*_* L. 9

1.对于"外键表"而不是Table2,而对于主键,表1是不是?我的理解错了吗?

我相信你的理解是错误的.表2是您引用其主键的表.因此它列在主键下.Table1是具有外键的表(对另一个表的主键的引用); 因此它列在"外键表"下.

至于保存两个表的原因,即使外键后来列为属于Table1:我相信这是因为外键限制了两个表.他们都必须"知道"约束,所以他们都需要保存.