2010-10-09 98 views
39

我总是觉得在Management Studio中将外键添加到主表时会感到困惑。SQL Server 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添加一个外键表1。我将Table2,ID和“Foreign Key Table”设置为Table1,Table2ID的“Primary”弹出窗口。

我的问题:

  1. 不宜表2列出了 “外键表”和表1为 主键?我的理解是 错误?

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

回答

22

为什么不使用相当的T-SQL语句?似乎更容易,减少混乱对我说:

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

当我看到这一点,我相信这是立即清除两个表涉及什么,以及它们是如何连接(Table1.Table2ID - (引用) - >Table2.ID

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

+0

我知道我可以使用T-SQL,但我想知道这个设计背后的推理。还拖放带来了相同的窗口... – tvr 2010-10-09 09:39:50

9

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

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

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

+0

updoot回答_both_问题。 – 2017-07-21 17:18:53

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

如果您发布代码,XML或数据样本,**请**在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码示例”按钮(“{}”)以精确地设置格式并进行语法突出显示! – 2011-05-09 15:20:49

96
  • 单击表格旁边的展开符号。
  • 右键单击“Keys”文件夹并选择“New Foreign Key”。
  • (或者,您可以在打开表格后单击工具条上的关系按钮)
  • 单击“表格和列规格”行上的“...”按钮打开编辑器。
  • 左边的下拉列表将显示您要添加的表格,而静态文本字段会列出要添加到的表格。
  • 使用下拉菜单来指定您的约束条件,并确保双方的列数相同。
+1

问题是如何在SSMS中完成它。因此,这个答案得到我的投票。 – Bradley 2012-01-24 16:35:56

+2

也是我+1。出色的精确答案。 – 2012-10-12 20:21:17

+0

我认为如果“New Foriegn Key”没有出现,那么你没有权限或什么? – levininja 2016-11-03 01:56:47

相关问题