更新時(shí)間:2022-09-29 來(lái)源:黑馬程序員 瀏覽量:
在實(shí)際開(kāi)發(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)系有三種,具體如下。
多對(duì)一是數(shù)據(jù)表中最常見(jiàn)的一種關(guān)系。比如,員工與部門(mén)之間的關(guān)系,一個(gè)部門(mén)可以有多個(gè)員工,而一個(gè)員工不能屬于多個(gè)部門(mén),也就是說(shuō)部門(mén)表中的一行在員工表中可以有許多匹配行,但員工表中的一行在部門(mén)表中只能有一個(gè)匹配行。通過(guò)之前的講解,我們知道表之間的關(guān)系是通過(guò)外鍵建立的。在多對(duì)一的表關(guān)系中,應(yīng)該將外鍵建在多的一方,否則會(huì)造成數(shù)據(jù)的冗余。
多對(duì)多也是數(shù)據(jù)表中的一種關(guān)系。比如學(xué)生與課程之間的關(guān)系,一個(gè)學(xué)生可以選擇多門(mén)課程,當(dāng)然一門(mén)課程也供多個(gè)學(xué)生選擇,也就是說(shuō)學(xué)生表中的一行在課程表中可以有許多匹配行,課程表中的一行在學(xué)生表中也有許多匹配行。
通常情況下,為了實(shí)現(xiàn)這種關(guān)系需要定義一張中間表(稱(chēng)為連接表),該表會(huì)存在兩個(gè)外鍵,分別參照課程表和學(xué)生表。在多對(duì)多的關(guān)系中,需要注意的是,連接表的兩個(gè)外鍵都是可以重復(fù)的,但是兩個(gè)外鍵之間的關(guān)系是不能重復(fù)的,所以這兩個(gè)外鍵又是連接表的聯(lián)合主鍵。
一對(duì)一關(guān)系在實(shí)際生活中比較常見(jiàn),例如人與身份證之間就是一對(duì)一的關(guān)系,一個(gè)人對(duì)應(yīng)一張身份證,一張身份證只能匹配一個(gè)人。那么,一對(duì)一關(guān)系的兩張表如何建立外鍵?
首先,要分清主從關(guān)系。從表需要主表的存在才有意義,身份證需要人的存在才有意義。因此人為主表,身份證為從表。要在身份證表中建立外鍵。由實(shí)際經(jīng)驗(yàn)可知,身份證中的外鍵必須是非空唯一的,因此通常會(huì)直接用從表(表身份證)中的主鍵作為外鍵。
需要注意的是,這種關(guān)系在數(shù)據(jù)庫(kù)中并不常見(jiàn),因?yàn)橐赃@種方式存儲(chǔ)的信息通常會(huì)放在一個(gè)表中。在實(shí)際開(kāi)發(fā)中,一對(duì)一關(guān)聯(lián)關(guān)系可以應(yīng)用于以下幾方面。
(1)分割具有很多列的表
(2)由于安全原因而隔離表的一部分。
(3)保存臨時(shí)的數(shù)據(jù),并且可以毫不費(fèi)力地通過(guò)刪除該表而刪除這些數(shù)據(jù)。
SpringBoot自動(dòng)配置的工作流程是怎樣的?
2022-09-28什么是抽象類(lèi)?使用abstract格式修飾抽象方法
2022-09-28大數(shù)據(jù)和Java哪個(gè)難學(xué)?公布答案
2022-09-27快速掌握HTML+CSS+Javascript+Vue3知識(shí)【Java程序員定制版】
2022-09-26java零基礎(chǔ)自學(xué)教程免費(fèi),看完愛(ài)上Java學(xué)習(xí)
2022-09-26Java必會(huì)技術(shù):認(rèn)識(shí)SQL語(yǔ)言
2022-09-20