MySQL關係 一對多 一對一 多對多

2021-08-27 03:00:42 字數 1591 閱讀 7402

將實體與實體的關係,反應到最終資料庫表的設計上,將關係分為三種:一對一,一對多(多對一)和多對多,所有的關係都是表與表之間的關係

一對一

一對一:一張表的一條記錄只能與另外一條記錄進行對應,反之亦然

id(p) 姓名 性別 年齡 身高 婚姻狀況 籍貫 家庭位址 緊急聯絡人 體重

表設計成以上這種形式:符合要求,其中姓名,性別,年齡,身高體重屬於常用資料,但是婚姻籍貫住址聯絡人屬於不常用的資料,如果每次查詢所有資料,不常用的資料就會影響效率,實際又不用

解決方案:將常用和不常用的資訊分離儲存,分成兩張表

常用資訊表

id(p) 姓名 性別 年齡 身高 體重

不常用資訊表,保證不常用資訊與常用資訊一定能夠對應上:找乙個具有唯一性(確定記錄)的字段來共同連線兩張表

婚姻 籍貫 住址 聯絡人 id(p)

乙個常用表中的一條記錄,永遠只能在一張不常用表匹配一條記錄,反過來乙個不常用表中的一條記錄在常用表中也只能匹配一條記錄,一對一的關係。

一對多:一張表中的一條記錄可以對應另外一張表中的多條記錄,但是返過來,另外一張表中的一條記錄只能對應第一張表的一條記錄,這種關係就是一對多或者多對一的關係

母親與孩子的關係:母親與孩子兩個實體

母親表

id(p) 名字 年齡 性別

孩子表

id(p) 名字 年齡 性別 媽媽id(p)

媽媽表主鍵

以上關係,乙個媽媽可以在孩子表中找到多條記錄,或者一條,但是乙個孩子只能乙個媽媽,是一種典型的一對多的關係

但是以上設計解決了實體設計表問題,但是沒有解決關係問題,孩子找不出媽媽,媽媽也找不到孩子。

解決方案:在某一張表中增加乙個字段,能夠找到另一張表中的記錄;應該在孩子表中增加乙個字段指向媽媽表;因為孩子表的記錄只能匹配到一條媽媽表的記錄

一張表中(a)的一條記錄能夠對應另外一張表(b)中的多條記錄,同時b表找中的一條記錄也能對應a表中的多條記錄,多對多的關係

老師教學:老師和學生

老師表

t_id(p) 姓名 性別

1 a 男

2 b 女

學生表

s_id(p) 姓名 性別

1 張三 男

2 小芳 女

中間關係表:老師與學生的關係

id t_id(老師) s_id(學生)

1 a 張三

2 b 小芳

3 b 張三

以上設計方案:實現了實體的設計,但是沒有維護實體的關係

乙個老師教過多個學生,乙個學生也被多個老師教過

解決方案:在學生表中增加老師字段;不管在哪張表中都會出現乙個問題,該字段要儲存多個資料,而且是與其他表有關係的字段,不符合表的設計規範,增加一張新錶,專門維護兩張表之間的關係

增加中間表之後:中間表與老師表形成了一對多的關係:而且中間表是多表,維護了能夠唯一找到一表的關係;同樣的學生表與中間表也是一對多的關係,一對多的關係可以匹配到關聯表之間的資料

學生找老師:找出學生id->中間表找出匹配記錄(多條)->老師表匹配(一條)

老師找學生:找出老師id->中間表找出匹配記錄(多條)->學生表匹配(一條)

資料庫一對一,多對一,多對多的關係

關聯對映 一對多 多對一 存在最普遍的對映關係,簡單來講就如球員與球隊的關係 一對多 從球隊角度來說乙個球隊擁有多個球員 即為一對多 多對一 從球員角度來說多個球員屬於乙個球隊 即為多對一 資料表間一對多關係如下圖 關聯對映 一對一 一對一關係就如球隊與球隊所在位址之間的關係,一支球隊僅有乙個位址,...

mySQL 表關係 一對一 一對多 多對多

一對一 a中的乙個實體至多與b中的乙個實體相關聯,且b中的乙個實體也至多與a中乙個實體相關聯。1.一對一 one to one 每個實體的獨有屬性 區別於其他實體 如個人的郵箱,每個使用者的郵箱都是不同的,即使用者與郵箱之間的關係為一對一關係。使用者與購物行為,因為多個使用者都可以購物,則兩者為多對...

表關係 一對一,一對多,多對多

可以在資料庫圖表中的表之間建立關係,以顯示乙個表中的列與另乙個表中的列是如何相鏈結的。更好的方法是將有關出版社的資訊在單獨的表,publishers,中只儲存一次。然後可以在titles表中放置乙個引用出版社表中某項的指標。為了確保您的資料同步,可以實施titles和publishers之間的參照完...