主鍵與候選鍵
雖然主鍵是從候選鍵中選擇出來的,但是主鍵與其他候選鍵之間存在一些差異,本文將對此進行詳細討論。數據庫設計是維護和存儲數據時最重要的活動之一。在這個設計過程中,必須創建具有許多關係的不同表。為了訪問數據庫中的這些表,現代數據庫設計語言(如MYSQL、MSAccess、SQLite等)中使用了不同類型的鍵,其中候選鍵和主鍵已成為數據庫設計中必不可少的部分。
什麼是候選密鑰(a candidate key)?
候選鍵是數據庫表中的一列或一組列,可用於唯一標識任何數據庫記錄,而無需引用任何其他數據。數據庫的每個表可以有一個或多個候選鍵。可以使用函數依賴項創建一組候選鍵。候選密鑰中有一些重要的特性。他們是;
•候選關鍵字在域內應是唯一的,且不應包含任何空值。
•候選鍵不應更改,並且對於實體的特定出現,它必須保持相同的值。
候選鍵的主要用途是幫助識別大表中數百萬行中的一行。每個候選密鑰都有資格成為主鍵。然而,在所有候選鍵中,最重要和最特殊的候選鍵將成為表的主鍵,並且是候選鍵中最好的。
什麼是主鍵(a primary key)?
主鍵是表的最佳候選鍵,用於唯一標識存儲在表中的記錄。在數據庫中創建新表時,我們需要選擇主鍵。因此,為表選擇主鍵是數據庫設計者應該做的最關鍵的決定。在決定主鍵時,最重要的約束是表的選定列只應包含唯一值,而不應包含任何空值。設計表格時常用的一些主鍵是社會保險號碼(SSN)、身份證號碼和國民身份證號碼(NIC)。
程序員應該記住仔細選擇主鍵,因為它很難更改。因此,根據程序員的說法,創建主鍵的最佳實踐是使用內部生成的主鍵,例如由msaccess的AutoNumber數據類型創建的記錄ID。如果我們試圖將一條記錄**主鍵與現有記錄重複的表中,則**操作將失敗。主鍵值不應該一直變化,所以保持靜態主鍵更為重要。
主鍵(primary key)和候選關鍵字(candidate key)的區別
•候選鍵是限定為唯一的列,而主鍵是唯一標識記錄的列。
•沒有候選鍵的表不代表任何關係。
•數據庫中一個表可以有多個候選鍵,但一個表只能有一個主鍵。
•雖然主鍵是候選鍵之一,但有時它是唯一的候選鍵。
•一旦選擇了主鍵,其他候選鍵將成為唯一鍵。
•實際上,候選鍵可以包含空值,儘管它目前不包含任何值。因此,候選鍵不適合主鍵,因為主鍵不應包含任何空值。
•目前唯一的候選鍵也可能包含重複值,使候選鍵無法成為主鍵。
小結:
主鍵與候選鍵
候選鍵和主鍵是數據庫設計中用來唯一標識記錄中的數據和建立數據庫表之間關係的關鍵鍵。一個表應該只包含一個主鍵,並且可以包含多個候選鍵。目前大多數的主數據庫都能自動生成密鑰。因此,主鍵和候選鍵為數據庫管理系統提供了大量的支持。
圖片來源:
- SqlPac的主鍵(CC by-SA 3.0)