如何在Microsoft SQL Server中創建外鍵

數據庫中最重要的概念之一是創建數據庫表之間的關係。 這些關係提供了一種機制,用於鏈接存儲在多個表中的數據並以高效的方式檢索它。 為了在兩個表之間創建鏈接,您必須在一個表中指定一個引用另一個表中的列的外鍵

數據庫表和關係

您可能已經知道數據庫只是一系列表 ,與您可能已經在電子表格程序中使用的類似,如Microsoft Excel。 實際上,您甚至可以將Excel電子表格轉換為數據庫。 但是,數據庫與電子表格不同的地方在於在表格之間建立強大的關係

例如,考慮一家公司用來跟踪人力資源信息的數據庫。 該數據庫可能有一個名為Employees的表,其中包含公司員工的每個成員的以下信息:

在本例中,員工ID是一個唯一生成的整數,在將每個員工添加到數據庫中時會分配給每個員工。 職位ID是用於引用員工在公司中的職位的職位代碼。 在這個計劃中,員工可能只有一個職位,但是多個(或不包括)員工可以填補每個職位。 例如,您可能擁有數百名擁有“收銀員”職位的員工。

數據庫還可能包含一個名為Positions的表格,其中包含有關每個職位的以下附加信息:

此表中的Position ID字段與Employees表中的Employee ID字段相似 - 它是一個唯一生成的整數,在將位置添加到數據庫時創建。

當我們從數據庫中抽取員工名單時,要求每個人的姓名和頭銜是很自然的。 但是,此信息存儲在多個數據庫表中,因此只能使用JOIN查詢進行檢索,這需要表之間存在現有關係。

當您查看表格的結構時,定義關係的字段可能很明顯 - 位置ID字段。 每位員工只能擁有一個職位,並且通過在職位表的相應條目中包含職位ID來識別該職位。 除了作為職位表的主鍵之外 ,在本例中,職位ID字段也是從僱員表到職位表的外鍵。 然後數據庫可以使用該字段關聯來自多個表的信息,並確保對數據庫的任何更改或添加都會繼續強制執行參照完整性

一旦確定了外鍵,就可以繼續使用以下查詢從數據庫中提取所需的信息:

SELECT FirstName,LastName,Title FROM Employees INNER JOIN Positions ON Employees.PositionID = Positions.PositionID

在SQL Server中創建外鍵

從技術上講,您不需要明確定義關係就能夠執行上面的查詢。 但是,如果使用外鍵約束顯式定義關係,則數據庫將能夠為您執行一些內務工作:

以下是在SQL Server中創建外鍵的方法:

ALTER TABLE僱員添加外鍵(PositionID)參考Positions(PositionID)

通過添加子句創建表時,您還可以創建一個外鍵:

外鍵參考倉位(PositionID)

到外鍵列的列定義的末尾。