天天看點

Oracle的主鍵和外鍵

一、表的主鍵

在現實世界中,很多資料具有唯一的特性,例如身份證号碼,在國家人口基本資訊表中,一定不會存在多個人用同一個身份證号碼的情況,再例如手機号碼、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。