47

我总是觉得在 Management Studio 中将外键添加到主表很令人困惑。

可以说我有一个

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

Table2 
{
    ID int, -- Primary Key
    SomeData nvarchar(50)
}

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

我的问题:

  1. 不应该为“外键表”列出 Table2 并为主键列出 Table1 吗?我的理解错了吗?

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

4

5 回答 5

109
  • 单击表格旁边的展开符号。
  • 右键单击“Keys”文件夹并选择“New Foreign Key”。
  • (或者,您可以在打开表格时单击工具条上的“关系”按钮)
  • 单击“表和列规范”行上的“...”按钮以打开编辑器。
  • 左侧的下拉菜单将是您从中添加的表,静态文本字段将列出您要添加到的表。
  • 使用下拉菜单指定您的约束,并确保两侧的列数相同。
于 2011-11-14T19:22:43.887 回答
22

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

ALTER TABLE dbo.Table1
  ADD CONSTRAINT FK_Table1_Table2
    FOREIGN KEY(Table2ID) REFERENCES dbo.Table2(ID)

当我读到这篇文章时,我相信这会立即清楚涉及到两个表,以及它们是如何连接的(Table1.Table2ID--(references)--> Table2.ID

如果您想留在 SSMS 设计器的世界中:您还可以创建涉及的表的数据库图,然后只需将Table2ID列从Table1上方Table2拖放到那里的ID列上 - 这将以图形方式告诉 SSMS 您想要做什么,您只需要检查您的选择并在弹出的对话框中单击确定。

于 2010-10-09T09:28:47.237 回答
9

1.“外键表”不应该列Table2,主键不应该列Table1吗?我的理解错了吗?

我相信你的理解是错误的。Table2 是您要引用其主键的表。因此它列在主键下。Table1 是将具有外键的表(对另一个表的主键的引用);因此它被列在“外键表”下。

至于为什么保存两个表,即使外键后来被列为属于 Table1:我相信这是因为外键约束了两个表。他们都必须“知道”约束,所以他们都需要被保存。

于 2011-04-06T21:30:30.850 回答
1
ALTER TABLE dbo.Table1
  ADD CONSTRAINT FK_Table1_Table2
    FOREIGN KEY(Table2ID) REFERENCES dbo.Table2(ID)
于 2011-05-09T12:22:41.443 回答
1

按照这种方式在表中创建外键。

  1. 右键单击列,然后单击关系

在此处输入图像描述

  1. 单击...中的特定于表和列

在此处输入图像描述

  1. 在左侧选择主键表和键,在右侧选择要映射的当前表

在此处输入图像描述

  1. 单击特定于表和列中的向下箭头以确认外键映射。

在此处输入图像描述

  1. 单击关闭按钮,现在创建了一个外键。
于 2021-07-22T14:15:03.263 回答