SQL Server Management Studio – 添加外键混淆?

我总是发现在Management Studio中将外键添加到主表时会感到困惑。

可以说我有一个

Table1 { ID int, -- Primary Key Table2ID int, -- Refers to Table2's ID } Table2 { ID int, -- Primary Key SomeData nvarchar(50) } 

我正在通过Right Click -> Relationships -> Table and column specification向Table1添加一个外键。 我将Table2,ID和“Foreign Key Table”设置为Table1,Table2ID的“Primary”popup窗口。

我的问题:

  1. 不应该列出“外键表”和主键表1列表2? 我的理解错了吗?

  2. 当我保存我得到一个警报“下面的表将被保存到您的数据库”。 并显示两个表。 我真的不明白这一点。 我只改变了Table1。 为什么显示第二个表格?

  • 点击表格旁边的展开符号。
  • 右键点击“Keys”文件夹并select“New Foreign Key”。
  • (或者,也可以在打开表格时单击工具条上的“关系”button)
  • 点击“表格和列规格”行中的“…”button以打开编辑器。
  • 左边的下拉列表是您要添加的表格,而静态文本字段会列出要添加的表格。
  • 使用下拉菜单来指定您的约束,并确保双方具有相同的列数。

你为什么不使用相当的T-SQL语句? 似乎更容易,更不容易混淆我:

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

当我读到这个,我相信这是立即清楚什么两个表涉及,以及他们如何连接( Table1.Table2ID – (引用) – > Table2.ID

如果你想留在SSMSdevise师的世界里,你也可以创build一个涉及你的表的数据库图表,然后只需将Table2ID列从Table1拖放到Table2然后将它放到ID列上 – 这将graphics地告诉SSMS什么你想要做的,你只需要检查你的select,并在popup的对话框上单击确定。

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

我相信你的理解是错误的。 表2是您正在引用的主键的表。 因此它在主键下列出。 表1是将具有外键(对另一个表的主键的引用)的表; 因此在“外键表”中列出。

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

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