首頁(yè)常見問(wèn)題正文

Java操作數(shù)據(jù)庫(kù):多表操作中的關(guān)聯(lián)關(guān)系

更新時(shí)間:2022-09-29 來(lái)源:黑馬程序員 瀏覽量:

IT培訓(xùn)班

  在實(shí)際開發(fā)中,需要根據(jù)實(shí)體的內(nèi)容設(shè)計(jì)數(shù)據(jù)表,實(shí)體間會(huì)有各種關(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)系有三種,具體如下。

  1.多對(duì)一

  多對(duì)一是數(shù)據(jù)表中最常見的一種關(guān)系。比如,員工與部門之間的關(guān)系,一個(gè)部門可以有多個(gè)員工,而一個(gè)員工不能屬于多個(gè)部門,也就是說(shuō)部門表中的一行在員工表中可以有許多匹配行,但員工表中的一行在部門表中只能有一個(gè)匹配行。通過(guò)之前的講解,我們知道表之間的關(guān)系是通過(guò)外鍵建立的。在多對(duì)一的表關(guān)系中,應(yīng)該將外鍵建在多的一方,否則會(huì)造成數(shù)據(jù)的冗余。

1664416072200_操作關(guān)聯(lián)表.jpg

  2.多對(duì)多

  多對(duì)多也是數(shù)據(jù)表中的一種關(guān)系。比如學(xué)生與課程之間的關(guān)系,一個(gè)學(xué)生可以選擇多門課程,當(dāng)然一門課程也供多個(gè)學(xué)生選擇,也就是說(shuō)學(xué)生表中的一行在課程表中可以有許多匹配行,課程表中的一行在學(xué)生表中也有許多匹配行。

  通常情況下,為了實(shí)現(xiàn)這種關(guān)系需要定義一張中間表(稱為連接表),該表會(huì)存在兩個(gè)外鍵,分別參照課程表和學(xué)生表。在多對(duì)多的關(guān)系中,需要注意的是,連接表的兩個(gè)外鍵都是可以重復(fù)的,但是兩個(gè)外鍵之間的關(guān)系是不能重復(fù)的,所以這兩個(gè)外鍵又是連接表的聯(lián)合主鍵。

  3.一對(duì)一

  一對(duì)一關(guān)系在實(shí)際生活中比較常見,例如人與身份證之間就是一對(duì)一的關(guān)系,一個(gè)人對(duì)應(yīng)一張身份證,一張身份證只能匹配一個(gè)人。那么,一對(duì)一關(guān)系的兩張表如何建立外鍵?

  首先,要分清主從關(guān)系。從表需要主表的存在才有意義,身份證需要人的存在才有意義。因此人為主表,身份證為從表。要在身份證表中建立外鍵。由實(shí)際經(jīng)驗(yàn)可知,身份證中的外鍵必須是非空唯一的,因此通常會(huì)直接用從表(表身份證)中的主鍵作為外鍵。

  需要注意的是,這種關(guān)系在數(shù)據(jù)庫(kù)中并不常見,因?yàn)橐赃@種方式存儲(chǔ)的信息通常會(huì)放在一個(gè)表中。在實(shí)際開發(fā)中,一對(duì)一關(guān)聯(lián)關(guān)系可以應(yīng)用于以下幾方面。

  (1)分割具有很多列的表

  (2)由于安全原因而隔離表的一部分。

  (3)保存臨時(shí)的數(shù)據(jù),并且可以毫不費(fèi)力地通過(guò)刪除該表而刪除這些數(shù)據(jù)。

分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!