數據庫中最重要的概念之一是創建數據庫表之間的關係。 這些關係提供了一種機制,用於鏈接存儲在多個表中的數據並以高效的方式檢索它。 為了在兩個表之間創建鏈接,您必須在一個表中指定一個引用另一個表中的列的外鍵 。
數據庫表和關係
您可能已經知道數據庫只是一系列表 ,與您可能已經在電子表格程序中使用的類似,如Microsoft Excel。 實際上,您甚至可以將Excel電子表格轉換為數據庫。 但是,數據庫與電子表格不同的地方在於在表格之間建立強大的關係 。
例如,考慮一家公司用來跟踪人力資源信息的數據庫。 該數據庫可能有一個名為Employees的表,其中包含公司員工的每個成員的以下信息:
- 員工ID
- 名字
- 姓
- 辦公室電話
- 家庭電話
- PositionID
在本例中,員工ID是一個唯一生成的整數,在將每個員工添加到數據庫中時會分配給每個員工。 職位ID是用於引用員工在公司中的職位的職位代碼。 在這個計劃中,員工可能只有一個職位,但是多個(或不包括)員工可以填補每個職位。 例如,您可能擁有數百名擁有“收銀員”職位的員工。
數據庫還可能包含一個名為Positions的表格,其中包含有關每個職位的以下附加信息:
- PositionID
- 標題
- 職業等級
- SkillCategory
- 位置
此表中的Position ID字段與Employees表中的Employee ID字段相似 - 它是一個唯一生成的整數,在將位置添加到數據庫時創建。
當我們從數據庫中抽取員工名單時,要求每個人的姓名和頭銜是很自然的。 但是,此信息存儲在多個數據庫表中,因此只能使用JOIN查詢進行檢索,這需要表之間存在現有關係。
當您查看表格的結構時,定義關係的字段可能很明顯 - 位置ID字段。 每位員工只能擁有一個職位,並且通過在職位表的相應條目中包含職位ID來識別該職位。 除了作為職位表的主鍵之外 ,在本例中,職位ID字段也是從僱員表到職位表的外鍵。 然後數據庫可以使用該字段關聯來自多個表的信息,並確保對數據庫的任何更改或添加都會繼續強制執行參照完整性 。
一旦確定了外鍵,就可以繼續使用以下查詢從數據庫中提取所需的信息:
在SQL Server中創建外鍵
從技術上講,您不需要明確定義關係就能夠執行上面的查詢。 但是,如果使用外鍵約束顯式定義關係,則數據庫將能夠為您執行一些內務工作:
- 將新記錄添加到Employees表時,數據庫將確保您輸入的職位ID是職位表中的有效主鍵 。
- 如果您更改職位表中的職位ID,數據庫可以對Employees表執行所需更新以保持一致性。
- 數據庫可以通過拒絕刪除具有相應員工條目的職位或執行所有相關員工的級聯刪除來防止從職位表中刪除職位的影響。
以下是在SQL Server中創建外鍵的方法:
ALTER TABLE僱員添加外鍵(PositionID)參考Positions(PositionID)通過添加子句創建表時,您還可以創建一個外鍵:
外鍵參考倉位(PositionID)到外鍵列的列定義的末尾。