數據庫的關係鍵



關係鍵是關係數據庫的重要組成部分。關係鍵是一個表中的一個或幾個屬性,用來標識該表的每一行或與另一個表產生聯繫。


數據庫理論中, 超鍵、候選鍵與主鍵之間的關係:
• 候選鍵是超鍵的一種:不含有多餘屬性的超鍵
• 某個候選鍵被選爲主鍵

主鍵:

       主鍵,又稱主碼(primary key)。數據庫表中對儲存數據對象予以唯一和完整標識的數據列或屬性的組合。一個數據列只能有一個主鍵,且主鍵的取值不能缺失,即不能爲空值(Null)。

      從技術的角度來看,primary key和unique key有很多相似之處。但還是有以下區別:

  1. 作爲primary key的域/域組不能爲Null。而unique key可以。
  2. 在一個表中只能有一個primary key,而多個unique key可以同時存在。
  3. 更大的區別在邏輯設計上。primary key一般在邏輯設計中用作記錄標識,這也是設置primary key的本來用意。而unique key只是爲了保證域/域組的唯一性。

超鍵

     超鍵(superkey),有的文獻稱“超碼”,是在數據庫關係模式設計中能夠唯一標示多元組的屬性集。

     包含所有屬性的集叫做明顯超鍵

候選鍵

      在 關係模型中,候選鍵候選碼candidate key)是某個關係變量的一組屬性所組成的集合,它需要同時滿足下列兩個條件:

  1. 這個屬性集合始終能夠確保在關係中能唯一標識元組。
  2. 在這個屬性集合中找不出合適的真子集能夠滿足條件(1)

      滿足第一個條件的屬性集合稱爲超鍵,因此我們也可以把候選鍵定義爲“最小超鍵”,也就是不含有多餘屬性的超鍵。

     候 選鍵的重要性是它們能夠在關係中唯一標識出不同的元組,因此超鍵也是在設計數據庫模式時需要指定的最重要的約束之一。由於在關係模型中,每個關係都是一個集合(沒有重複的元素),所以每個關係都至少有一個候選鍵(因爲所有屬性組合必然是個超鍵)。但是在某些關係型數據庫中表也能代表多重集,所以在每個關係中都顯式地定義至少一個候選鍵是一條很重要的設計原則。數據庫管理系統通常都需要將每個關係中的某個候選鍵定義爲主鍵,亦即這個候選鍵是區分不同元組時首選的識別方式,例如外鍵通常就是引用主鍵而非其他候選鍵。參看數據庫系統概念,它還這麼說:“候選鍵屬性可以爲null,主碼屬性不能爲null”,那也就是說並不是所有的候選碼都可以作爲主鍵???希望網友給予指導,在此先謝謝了!!!

外鍵

外鍵foreign key),又稱外部鍵。其實在關係數據庫中,每個數據表都是由關係來連繫彼此的關係,父數據表(Parent Entity)的主鍵(primary key)會放在另一個數據表,當做屬性以創建彼此的關係,而這個屬性就是外鍵。

比如,學生跟老師之間是教學的關係,學生數據表會有個屬性叫指導老師(FK),而這個值就是對應到老師數據表的老師代號(PK),學生的指導老師就是外鍵。

代理鍵

在關係型數據庫設計中,代理鍵是在當數據表中的候選鍵都不適合當主鍵時,例如數據太長,或是意義層面太多,就會請一個無意義的但唯一的字段來代爲作主鍵。

代理鍵是:

Surrogate (1) – Hall, Owlett and Codd (1976)
一個代理鍵值確定了外部世界的一個實體。代理鍵值是數據庫生成的,從來不顯示給用戶或應用程序看。
Surrogate (2) – Wieringa and De Jonge (1991)
一個代理鍵值確定了數據庫中的一個對象。代理鍵值是數據庫生成的,用戶或應用程序看不到它。

在實踐中,代理鍵值通常是個自動遞增的數字。在Sybase或SQL Server,用identity column標識代理鍵,PostgreSQL裏用serial,Oracle裏用SEQUENCE,在MySQL裏用一個標記有AUTO_INCREMENT的字段。

何時使用代理鍵

以中國大陸的十八位身份證號爲例,從左往右爲六位數字地址碼,八位數字出生日期碼,三位數字順序碼和一位數字校驗碼。

一家公司想要將它的客戶記入數據庫,以客戶的身份證號作爲主鍵當然是可以的;但是這18位身份證號是用於標識大陸13多億人口的,一家公司的客戶顯然沒有這麼多,所以用18位的數字作爲主鍵有點浪費空間。

另外,身份證號中包含了地區、生日信息,若以身份證號爲主鍵,要不要另開字段記錄客戶的地區、生日也是個問題。如果不另開字段,從主鍵(身份證號)中提取地區、生日有點麻煩;如果開字段,主鍵和地區、生日字段的數據存在冗餘。

所以,一般的做法是,根本不記錄客戶的身份證號(除非有其他需求),用一個代理鍵作爲主鍵,另開字段記錄客戶的地區、生日等信息。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章