表的主鍵與外來鍵

2021-07-30 14:59:58 字數 1276 閱讀 6204

乙個關係表事實上是具有共同屬性的一類實體的集合。按照集合的定義,集合中元素不能重複。同樣,關係表中也不應該有重覆記錄。例如在學生表中,存有兩條一樣的學生記錄是不必要的,也是不合適的。

在現實世界中,除了事物本身的資訊外,事物之間還存在著很多聯絡,這種聯絡反映到資料庫中就體現為表之間的聯絡。例如在圖1中,學生表儲存學生資訊,係表儲存系的資訊。但學生表和係表之間是有聯絡的:每個學生都屬於乙個系,而每個系都可以包含多名學生,所以學生表和係表就存在著「屬於」的聯絡。

(圖1)

在關聯式資料庫中,如何儲存這種聯絡的資訊呢?就要借助「外來鍵」實現。如果乙個表中的某一列是另外乙個表的中的主鍵,那麼稱這列為外來鍵。例如圖1學生表中「系號」就是外來鍵,因為系號是係表的主鍵(建立主外來鍵關係的前提是兩張表中有相同的字段和屬性)。在學生表中設計了「系號」一列,就是為了儲存學生和系之間的聯絡資訊。

外來鍵就是連線兩個表的紐帶。通過外來鍵和主鍵的等值連線,如圖1,就可以將不同表裡的相關紀錄連線在一起,從而實現了資料庫中相關資料的查詢。利用外來鍵,可以查詢每個學生所在系的資訊,也可以查詢在制定的系所包含的學生資訊。

當兩個表通過「外來鍵-主鍵」建立了聯絡之後,就要保持兩表資料的一致性。例如在插入學生記錄的同時,外來鍵的值(系號)必須是係表中主鍵的有效值(必須有這個系),或者是空值(學生的系暫未確定);又如,在刪除係表記錄時,如果在學生表裡還有該系學生的記錄(該系還有學生在就讀),那麼系記錄就不能刪除。

下面再分析乙個員工資訊管理系統的例子。該資料庫中建有員工基本資訊表(person)、部門編碼表(deparment)和學歷編碼表(education),如圖2所示:

(圖2)

部門編碼表儲存了部門編號和部門名稱,部門編號(depid)是主鍵,每個部門的編號在表中具有唯一性,這樣就能保證每行都可以用主鍵來標識。

學歷編碼表儲存了學歷編號和學歷名稱,學歷編號(eduid)是主鍵。

員工基本資訊表儲存員工的基本資訊,需要包括工作證號、姓名、部門編號、職務、工資、學歷編號等字段,工作證號(id)是該錶的主鍵。在該表中,department列是乙個外來鍵,匹配部門編碼表中的depid主鍵;education列也是乙個外來鍵,匹配學歷編碼表中的eduid主鍵。利用外來鍵和主鍵的連線,就可以查詢出某人,如張三的部門是經理室,他的學歷室碩士。

利用「外來鍵-主鍵」的連線方式能更好奪得簡化資料庫設計過程,減少資料冗餘,提高資料庫效率。

表的主鍵與外來鍵

乙個關係表事實上是具有共同屬性的一類實體的集合。按照集合的定義,集合中元素不能重複。同樣,關係表中也不應該有重覆記錄。例如在學生表中,存有兩條一樣的學生記錄是不必要的,也是不合適的。在現實世界中,除了事物本身的資訊外,事物之間還存在著很多聯絡,這種聯絡反映到資料庫中就體現為表之間的聯絡。例如在圖1中...

主鍵與外來鍵

一 什麼是主鍵 外來鍵 關係型資料庫中的一條記錄中有若干個屬性,若其中 某乙個屬性組 注意是組 能唯一標識一條記錄 該屬性組就可以成為乙個主鍵 比如 學生表 學號,姓名,性別,班級 其中每個學生的 學號是唯一的,學號就是乙個主鍵 課程表 課程編號 課程名,學分 其中課程編號 是唯一的,課程編號 就是...

查詢表主鍵 外來鍵

專案中用到的一些sql oracle下的 總結 1 查詢表的所有索引 包括索引名,型別,構成列 select t.i.index type from user ind columns t,user indexes i where t.index name i.index name and t.tab...