主關鍵字

主關鍵字

主關鍵字(primary key)是表中的一個或多個欄位,它的值用於唯一地標識表中的某一條記錄。在兩個表的關係中,主關鍵字用來在一個表中引用來自於另一個表中的特定記錄。主關鍵字是一種唯一關鍵字,表定義的一部分。一個表的主鍵可以由多個關鍵字共同組成,並且主關鍵字的列不能包含空值。主關鍵字是可選的,並且可在 CREATE TABLE 或 ALTER TABLE 語句中定義。

知識概念


概述
主關鍵字(主鍵,primary key)是被挑選出來,作表的行的唯一標識的。一個表只有一個主關鍵字。主關鍵字又可以稱為主鍵。主鍵可以由一個欄位,也可以由多個欄位組成,分別稱為單欄位主鍵或多欄位主鍵。又稱主碼。並且它可以唯一確定表中的一行數據,或者可以唯一確定一個實體。
碼的定義
設K是關係模式R(U,F)中的屬性或屬性組,K’是K的任一子集。若K→U,而不存在K’→U,則K為R的候選碼(Candidate Key)
Ø 若候選碼多於一個,則選其中的一個為主碼(Primary Key);
Ø 包含在任一候選碼中的屬性,叫做主屬性(Primary Attribute);
Ø 不包含在任何碼中的屬性稱為非主屬性(Nonprime Attribute)或非碼屬性(Nonkey Attribute)
Ø 關係模式中,最簡單的情況是單個屬性是碼,稱為單碼(Single Key);最極端的情況是整個屬性組是碼,稱為全碼(All-Key)。
全碼的例子
簽約(演員名,製片公司,電影名)
外碼:設有兩個關係R和S,X是R的屬性或屬性組,並且X不是R的碼,但X是S的碼(或與S的碼意義相同),則稱X是R的外部碼(Foreign Key),簡稱外碼或外鍵。
如:職工(職工號,姓名,性別,職稱,部門號)
部門(部門號,部門名,電話,負責人)
其中職工關係中的“部門號”就是職工關係的一個外碼。
在此需要注意,在定義中說X不是R的碼,並不是說X不是R的主屬性,X不是碼,但可以是碼的組成屬性,或者是任一候選碼中的一個主屬性。

作用介紹


1)保證實體的完整性;
2)加快資料庫的操作速度;
3)在表中添加新記錄時,ACCESS會自動檢查新記錄的主鍵值,不允許該值與其他記錄的主鍵值重複;
4) ACCESS自動按主鍵值的順序顯示錶中的記錄。如果沒有定義主鍵,則按輸入記錄的順序顯示錶中的記錄。

遵循原則


建立主鍵應該遵循的原則
1. 主鍵應當是對用戶沒有意義的。如果用戶看到了一個表示多對多關係的連接表中的數據,並抱怨它沒有什麼用處,那就證明它的主鍵設計地很好。
2. 永遠也不要更新主鍵。實際上,因為主鍵除了唯一地標識一行之外,再沒有其他的用途了,所以也就沒有理由去對它更新。如果主鍵需要更新,則說明主鍵應對用戶無意義的原則被違反了。
註:這項原則對於那些經常需要在數據轉換或多資料庫合併時進行數據整理的數據並不適用。
3. 主鍵不應包含動態變化的數據,如時間戳、創建時間列、修改時間列等。
4. 主鍵應當由計算機自動生成。如果有人來對主鍵的創建進行干預,就會使它帶有除了唯一標識一行以外的意義。一旦越過這個界限,就可能產生人為修改主鍵的動機,這樣,這種系統用來鏈接記錄行、管理記錄行的關鍵手段就會落入不了解資料庫設計的人的手中。

特點介紹


1) 一個表中只能有一個主鍵。如果在其他欄位上建立主鍵,則原來的主鍵就會取消。在ACCESS中,雖然主鍵不是必需的,但最好為每個表都設置一個主鍵。
2)主鍵的值不可重複,也不可為空(NULL)。

定義方法


在表的設計視圖中,選擇要定義為主鍵的一個或多個欄位(如果是單欄位,可以單擊該欄位左側的選定器;如果是多個欄位,可以先按住CTRL鍵,再次單擊這些欄位的選定器),然後單擊工具欄上的"主鍵"按鈕,或者單擊右鍵,從快捷菜單中選擇“主鍵”命令。
定義主鍵后,在主鍵的左側會顯示一個鑰匙狀的圖標,表示該欄位已被設為主鍵,如果沒有定義主鍵,則在保存表時,ACCESS會彈出一個消息對話框,詢問用戶是否創建主鍵。如果選擇“否”,則不創建主鍵;選擇“是”,則ACCESS會自動創建一個自動編號類型的欄位並添加到表的第一列,作為該表的主鍵。
若要取消主鍵,可以先選定該主鍵欄位,再單擊工具欄上的“主鍵”按鈕。
軟道語錄
主鍵
主鍵是實體中用於區分,識別不同實體的屬性。

建立方式


在建置新表格時設定主鍵的方式
CREATE TABLE Customer
(SID integer,
Last_Name varchar(30),
First_Name varchar(30),
PRIMARY KEY (SID));
Oracle:
CREATE TABLE Customer
(SID integer PRIMARY KEY,
Last_Name varchar(30),
First_Name varchar(30));
SQL Server:
CREATE TABLE Customer
(SID integer PRIMARY KEY,
Last_Name varchar(30),
First_Name varchar(30));