更新時間:2022-09-29 來源:黑馬程序員 瀏覽量:
在實際開發(fā)中,需要根據(jù)實體的內(nèi)容設(shè)計數(shù)據(jù)表,實體間會有各種關(guān)聯(lián)關(guān)系。所以根據(jù)實體設(shè)計的數(shù)據(jù)表之間也存在著各種關(guān)聯(lián)關(guān)系,MySQL中數(shù)據(jù)表的關(guān)聯(lián)關(guān)系有三種,具體如下。
多對一是數(shù)據(jù)表中最常見的一種關(guān)系。比如,員工與部門之間的關(guān)系,一個部門可以有多個員工,而一個員工不能屬于多個部門,也就是說部門表中的一行在員工表中可以有許多匹配行,但員工表中的一行在部門表中只能有一個匹配行。通過之前的講解,我們知道表之間的關(guān)系是通過外鍵建立的。在多對一的表關(guān)系中,應(yīng)該將外鍵建在多的一方,否則會造成數(shù)據(jù)的冗余。
多對多也是數(shù)據(jù)表中的一種關(guān)系。比如學生與課程之間的關(guān)系,一個學生可以選擇多門課程,當然一門課程也供多個學生選擇,也就是說學生表中的一行在課程表中可以有許多匹配行,課程表中的一行在學生表中也有許多匹配行。
通常情況下,為了實現(xiàn)這種關(guān)系需要定義一張中間表(稱為連接表),該表會存在兩個外鍵,分別參照課程表和學生表。在多對多的關(guān)系中,需要注意的是,連接表的兩個外鍵都是可以重復的,但是兩個外鍵之間的關(guān)系是不能重復的,所以這兩個外鍵又是連接表的聯(lián)合主鍵。
一對一關(guān)系在實際生活中比較常見,例如人與身份證之間就是一對一的關(guān)系,一個人對應(yīng)一張身份證,一張身份證只能匹配一個人。那么,一對一關(guān)系的兩張表如何建立外鍵?
首先,要分清主從關(guān)系。從表需要主表的存在才有意義,身份證需要人的存在才有意義。因此人為主表,身份證為從表。要在身份證表中建立外鍵。由實際經(jīng)驗可知,身份證中的外鍵必須是非空唯一的,因此通常會直接用從表(表身份證)中的主鍵作為外鍵。
需要注意的是,這種關(guān)系在數(shù)據(jù)庫中并不常見,因為以這種方式存儲的信息通常會放在一個表中。在實際開發(fā)中,一對一關(guān)聯(lián)關(guān)系可以應(yīng)用于以下幾方面。
(1)分割具有很多列的表
(2)由于安全原因而隔離表的一部分。
(3)保存臨時的數(shù)據(jù),并且可以毫不費力地通過刪除該表而刪除這些數(shù)據(jù)。