一、表的主鍵
在現實世界中,很多資料具有唯一的特性,例如身份證号碼,在國家人口基本資訊表中,一定不會存在多個人用同一個身份證号碼的情況,再例如手機号碼、qq号碼、銀行帳号等等,還有學生管理系統,學生的年級、班級和學号三個字段組合起來是唯一的辨別。
如果表中一個字段或多個字段組合起來的值是唯一的,就可以作為表的主鍵,在建立或修改表時用primay key關鍵字來指定主鍵。一個表隻能有一個主鍵,而且組成主鍵的每個字段值都不能為空。
主鍵的作用:
1)展現資料結構設計的合理性。
2)提升資料操作的速度。
3)保證資料的完整性,在表中添加或修改記錄時,資料庫會檢查該記錄主鍵的值,不允許與其它記錄主鍵的值重複,這種做法有個專業的名詞:主鍵限制。
例如超女基本資訊表,編号的字段名是id,在超女選秀活動中,每個超女的編号肯定是唯一的,不可能存在兩個編号相同的超女,否則會引起混亂,我們可以把id字段設定為t_girl表的主鍵,後面的工作交給資料庫,如果試圖往表中插入多條id相同的記錄,資料庫将拒絕。
指定表的主建有兩種方法。
1)在create table時指定。
2)修改已經建好的表,增加主鍵限制。
例如:
在oracle資料庫中,雖然主鍵不是必需的,但是最好為每個表都設定一個主鍵,不管是單字段主鍵還是多字段主鍵(複合主鍵),它的存在代表了表結構的完整性,主鍵還可以用于其他表的外鍵關聯,外鍵的知識下面再介紹。
二、表的外鍵
外鍵(foreign key)是用于表達兩個表資料之間的關系,将表中主鍵字段添加到另一個表中,再建立兩個表之間的限制關系,這些字段就成為第二個表的外鍵。
超女選秀活動有兩個資料表:
1)賽區參數表
賽區代碼,賽區名稱,……。
2)超女基本資訊表
賽區代碼、超女編号、姓名、顔值、身材、身高、體重、……。
錄入超女基本資訊的時候要選擇賽區,為了保證資料的有效,要求錄入賽區代碼時,必須保證賽區參數表中有這個賽區代碼,否則資料是不一緻的,為了保證資料的完整性,必須在程式中判斷資料的合法性。針對這種情況,在表結構設計中采用外鍵來限制這兩個表的賽區代碼字段。
對賽區參數表來說,賽區代碼是該表的主鍵。
對超女基本資訊表來說,賽區代碼是該表的外鍵。
賽區參數表也稱為主表,超女基本資訊表也稱為從表。
合理的資料結構設計,表中的資料一定有一緻性限制,使用外鍵,讓資料庫去限制資料的一緻,不給任何人出錯的機會。不用外鍵會怎樣?不用也不會怎麼樣,如果不用外鍵,在程式中要寫代碼進行判斷,手工操作資料時也必須處處小心。
1)當對從表進行操作時,資料庫會:
a)向從表插入新記錄時,如果外鍵值在主表中不存在,阻止插入。
b)修改從表的記錄時,如果外鍵的值在主表中不存在,阻止修改。
2)當對主表進行修改操作時,資料庫會:
a)主表修改主鍵值時,舊值在從表裡存在便阻止修改。
3)當對主表進行删除操作時,資料庫會(三選一):
a)主表删除行時,其主鍵值在從表裡存在便阻止删除。
b)主表删除行時,連帶從表的相關行一起删除。
c)主表删除行時,把從表相關行的外鍵字段置為null。
建立外鍵的文法:
說明:
外鍵名,oracle的辨別符,建議采用fk_從表名_主表名的方式命名。
主表執行删除行時,其主鍵值在從表裡存在便阻止删除,如果on delete cascade,連帶從表的相關行一起删除;如果on delete set null,把從表相關行的外鍵字段置為null。