1. 程式人生 > >主鍵與索引,主鍵與外來鍵的關係

主鍵與索引,主鍵與外來鍵的關係

簡單來講 : 主鍵用來標識記錄,索引用來加速查詢。 

主鍵一定是唯一性索引,唯一性索引並不一定就是主鍵
    所謂主鍵就是能夠唯一標識表中某一行的屬性或屬性組,一個表只能有一個主鍵,但可以有多個候選索引。因為主鍵可以唯一標識某一行記錄,所以可以確保執行資料更新、刪除的時候不會出現張冠李戴的錯誤。主鍵除了上述作用外,常常與外來鍵構成參照完整性約束,防止出現數據不一致。資料庫在設計時,主鍵起到了很重要的作用。

    主鍵可以保證記錄的唯一和主鍵域非空,資料庫管理系統對於主鍵自動生成唯一索引,所以主鍵也是一個特殊的索引。

2.
    一個表中可以有多個唯一性索引,但只能有一個主鍵

3.

    主鍵列不允許空值,而唯一性索引列允許空值

4.

索引可以提高查詢的速度.
其實主鍵和索引都是鍵,不過主鍵是邏輯鍵,索引是物理鍵,意思就是主鍵不實際存在,而索引實際存在在資料庫中,主鍵一般都要建,主要是用來避免一張表中有相同的記錄,索引一般可以不建,但如果需要對該表進行查詢操作,則最好建,這樣可以加快檢索的速度

  主鍵與外來鍵的關係:  這需要理清幾個概念: 1)候選鍵: 關係中的一個屬性組,其值能唯一標識一個元組,若從該屬性組中去掉任何一個屬性,它就不具有這一性質了,這樣的屬性組稱作候選碼。 2)主鍵:當有多個候選碼時,可以選定一個作為主碼,選定的候選碼稱主鍵 3)外來鍵: 關係R中的一個屬性組,它不是R的候選碼,但它與另一個關係S的候選碼相對應,則稱這個屬性組為R的外碼或外來鍵。舉個例子: 有兩個關係: student(s#,sname,d#),即學生這個關係有三個屬性:學號,姓名,所在系別dep(d#,dname),即院系有兩個屬性:系號、系名則s#、d#是主鍵,也是各自所在關係的唯一候選鍵,d#是student的外來鍵。  

主鍵是定義一個表中起主要作用的資料項,這些資料項的資料在表中是唯一的,同時系統按主鍵為表建立索引。

外來鍵是定義一個表中的某資料項的資料,要參照另一個表的主鍵資料。既沒有在另一個表的主鍵資料中出現的資料,不允許在這個表的外來鍵資料項中出現。

主鍵:表中記錄的唯一標識

外來鍵:依賴於別的表的資料

唯一鍵:在表中唯一

鍵是一個或多個欄位的組合

唯一鍵:可以確定一條記錄的欄位(或欄位組合),一張表可以有多個唯一鍵,正如可以識別你的身份的可以是身份證,學生證,軍人證

主鍵:你把唯一鍵的一個選做主鍵,一張表只能有一個主鍵

外來鍵:所定義的外來鍵是另一張表的主鍵,

主鍵:表中記錄的唯一標識,外來鍵:依賴於別的表的資料,唯一鍵:在表中唯一。

主鍵和唯一鍵的一個區別:主鍵是不允許為NULL的,唯一鍵則可以,當然你可以加上NOT NULL來限制它

主鍵:能夠唯一表示資料表中的每個記錄的欄位或者欄位的組合就稱為主鍵。一個主鍵是唯一識別一個表的每一行記錄,但這只是其作用的一療分,主鍵的主要作用是將記錄和存放在其他表中的資料進行關聯,在這一點上,主鍵是不同表中各記錄間的簡單指標,主鍵約整就是確定表中的每一條記錄,主鍵不能是空值,唯一約束是用於指定一個或多個列的組合值具有唯一性,以防止在列中輸入重複的值,所以,主鍵的值對使用者而言是沒有什麼意義,並且和它賦予的值也沒有什麼特別聯絡。

外來鍵:

若有兩個表A,B,C是A的主鍵,而B中也有C欄位,則C就是表B的外來鍵,外來鍵約束主要用來維護兩個表之間資料的一致性。

A為基本表,B為資訊表。

在資料庫中,常常不只是一個表,這些表之間也不是相互獨立的,不同的表之間需要建立一種關係,才能將它們的資料相互溝通,而在這個溝通過程中,就需要表中有一個欄位作為標誌,不同的記錄對應的欄位取值不能相同,也不能是空白的,通過這個欄位中不同的值可以區別各條記錄,就像我們區別不同的人,每個人都有名字,但它卻不能作為主鍵,因為人名很容易出現重複,而身份證號是每個人都不同的,所以可以根據它來區別不同的人,資料庫的表中作為主鍵的段段就要像人的身份證號一樣,必須是每個記錄的值都不同,這才能根據主鍵的值來確定不同的記錄。

什麼是外來鍵?

說明你的表A中的某項a,是引用表B的某列b

為什麼要使用外來鍵?
RDBMS的基本概念,可以維護資料庫的完整。

如何來用,涉及到資料庫的定義。

唯一約束和主鍵的區別是什麼?

唯一性約束

唯一性約束所在的列允許空值,但是主鍵約束的列不允空值。

可以把唯一約束放在一個或者多個列上,但是,唯一性約束所在的列並不是表的主鍵列。

唯一性約束強制在指定的列上建立一個唯一性索引,在預設情況下,建立唯一性的非聚簇索引,但是,也可以指定所建立的索引是聚簇索引。

主鍵:

用於標識某行而且與之相關

是不可能更新

不應該允許空

唯一域/欄位

用於作為訪問某行的可選手段。

只要唯一就可以更新

可以為空

注意唯一和主鍵的區別,它們都是建立一個唯一的索引,一個表格僅含有一個主鍵約束列,但是,它有可能在其他列中含有許多的唯一約束。