2013-12-18 80 views
7

我曾經認爲外鍵和輔助鍵是相同的東西。外鍵與輔助鍵

谷歌搜索後,結果更令人困惑,有些人認爲它們是相同的,另外一些人則表示,輔助鍵是一個索引,不必是唯一的,並且比主鍵更容易訪問數據。

有人可以解釋這種差異嗎?
或者確實是混合術語的情況?
每個數據庫類型可能有所不同嗎?

回答

9

wiki/Foreign_key定義指出:

在關係數據庫中的情況下,外鍵是唯一標識的 另一個表中的行一個表中的字段(或 收藏領域)。換句話說,外鍵是用於在兩個表之間建立和實施鏈接 的列或列組合。

包含外鍵的表稱爲引用表或 子表,包含候選鍵的表稱爲 引用表或父表。

接案的例子:

一位顧客可以將0,1或更多的訂單。

從業務的角度來看,每個客戶都由一個唯一的ID(主鍵)標識,而不是每個訂單重複客戶信息,我們放置一個參考或指向該唯一客戶ID(客戶的主要鍵)在訂單表中。通過查看任何訂單,我們可以確定誰使用唯一的客戶ID進行了放置。

在插入Customer行後,在Order表中設置FK的值時,建立父(Customer表)和子表(Order table)之間建立的關係。此外,刪除子行可能會影響父級,具體取決於創建FK時建立的參照完整性標記(級聯規則)。 FK幫助建立關係數據庫系統的完整性。

至於「輔助鍵」,該術語是指一個或多個列的結構,它們一起幫助檢索同一個表的一行或多行。 '鑰匙'這個詞有些讓人誤解。次密鑰不一定是唯一的(不像PK)。它不是表格的主鍵。它用於定位行中的行(與FK不同)。它的執行只能通過一個索引(無論是否唯一),它的實現是可選的。一個表可以有0,1個或更多的次密鑰。例如,在Employee表中,您可以使用自動生成的列作爲主鍵。或者,您可以決定使用員工編號或SSN來檢索員工信息。

有時候人們將術語「次要密鑰」與術語「候選密鑰」或「交替密鑰」混合使用(通常出現在規範化上下文中),但它們都是不同的。

+0

有一個答案告訴輔助可能是候選人,thx糾正,但我仍然可以理解正常行和輔助鍵之間有什麼區別 –

+0

我的意思是,爲什麼我會創建一個輔助鍵,什麼是您也可以使用字段地址或名稱檢索員工信息,最後可以返回不止一行,就像輔助人員一樣 –

+0

您可以創建輔助鍵來幫助您以不同方式查找行可能更適合您的商業案例,而不是使用PK。例如,員工可能不記得他/她的SSN,但可以記住他/她的姓氏。至於考慮輔助密鑰候選密鑰的另一個定義,我不同意,因爲輔助密鑰不必是唯一的,而候選密鑰是唯一的。 – NoChance

3

外鍵是引用某個其他表上的索引的鍵。例如,如果您有一張客戶表,則該表中的某一列可能是一個國家/地區列,其中只包含一個ID號,該ID號將與該國家/地區的ID在單獨的國家/地區表中匹配。客戶表中的國家/地區列將是外鍵。

另一方面,輔助鍵只是您用來創建索引(用於加快查詢)的表中的不同列。外鍵與提高查詢速度無關。

1

「輔助鍵」不是我熟悉的術語。它沒有出現在Database Design for Mere Mortals的索引中,我不記得它在Pro SQL Server 2012 Relational Database Design and Implementation(我的兩本「數據庫設計的goto」書籍)。它也不出現在SQL for Smarties的索引中。這聽起來像它根本不是一個實際的術語。

我一直使用術語「候選鍵」。

候選鍵是唯一標識實體的一種方式。您在數據庫系統的設計階段識別所有候選鍵。在實施階段,您將決定一個主鍵:候選鍵中的一個或人造鍵。主鍵可能會用主鍵約束來實現;候選鍵可能會以獨特的約束來實現。

外鍵是另一個實體中一個實體的候選鍵的實例,表示這兩個實體之間的關係。它可能會用外鍵約束來實現。