表的主鍵與外鍵

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

在現實世界中,除了事物本身的信息外,事物之間還存在着很多聯繫,這種聯繫反映到數據庫中就體現爲表之間的聯繫。例如在圖1中,學生表存儲學生信息,系表存儲系的信息。但學生表和系表之間是有聯繫的:每個學生都屬於一個系,而每個系都可以包含多名學生,所以學生表和系表就存在着“屬於”的聯繫。

(圖1)

在關係數據庫中,如何存儲這種聯繫的信息呢?就要藉助“外鍵”實現。如果一個表中的某一列是另外一個表的中的主鍵,那麼稱這列爲外鍵。例如圖1學生表中“系號”就是外鍵,因爲系號是系表的主鍵(建立主外鍵關係的前提是兩張表中有相同的字段和屬性。在學生表中設計了“系號”一列,就是爲了存儲學生和系之間的聯繫信息。

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

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

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

(圖2)

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

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

員工基本信息表存儲員工的基本信息,需要包括工作證號、姓名、部門編號、職務、工資、學歷編號等字段,工作證號(ID)是該表的主鍵。在該表中,Department列是一個外鍵,匹配部門編碼表中的DepID主鍵;Education列也是一個外鍵,匹配學歷編碼表中的EduID主鍵。利用外鍵和主鍵的連接,就可以查詢出某人,如張三的部門是經理室,他的學歷室碩士。

利用“外鍵-主鍵”的連接方式能更好奪得簡化數據庫設計過程,減少數據冗餘,提高數據庫效率。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章