2010-10-09 120 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