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