1. 程式人生 > 實用技巧 >資料庫設計中,一對多,多對多,怎麼處理?

資料庫設計中,一對多,多對多,怎麼處理?

一、

1、專案中小組和主題之間是多對多的

2、可以將常用資訊和不常用資訊分成兩個表來優化資料庫

2、一對多的話:在多的裡面建立一的欄位,比如母親(一)和孩子(多),在孩子裡面新增母親id

3、多對多的話:比如老師和學生,建立一個關係表,表id,老師id,學生id即可

二、資料表設計(一對多,多對多)

做一個專案,必然是少不了資料庫設計的!在學習階段,基本都是單表。然而在實際開發過程中,一對多,多對多的表處處都是!簡單整理一下,一對多,多對多表如何設計整理一下思路:

資料庫實體間有三種對應關係:一對一,一對多,多對多。

一對一關係示例:

    • 一個學生對應一個學生檔案材料,或者每個人都有唯一的身份證編號。

一對多關係示例:

    • 一個學生只屬於一個班,但是一個班級有多名學生。

多對多關係示例:

    • 一個學生可以選擇多門課,一門課也有多名學生。

1.一對多關係處理:

通過學生和班級問題了解一對多:

設計資料庫表:只需在學生表中多新增一個班級號的ID;

注:在資料庫中表中初學時,還是通過新增主外來鍵約束,避免刪除資料時造成資料混亂!

2.多對多關係處理:

通過學生選課瞭解多對多問題的處理:

在多對多中在一個表中新增一個欄位就行不通了,所以處理多對多表問題時,就要考慮建立關係表了

例:

學生表: 課程表: 關係表:

注:所以對於多對多表,通過關係表就建立起了兩張表的聯絡!多對多表時建立主外來鍵後,要先刪除約束表內容再刪除主表內容

三、資料庫怎麼設計多對多的資料表

1.資料庫中的多對多關聯關係一般需採用中間表的方式處理,將多對多轉化為兩個一對多。
2.通過表的關係,來幫助我們怎樣建表,建幾張表。
一對一
一張表的一條記錄一定只能與另外一張表的一條記錄進行對應,反之亦然。

學生表:姓名,性別,年齡,身高,體重,籍貫,家庭住址,緊急聯絡人
其中姓名、性別、年齡、身高,體重屬於常用資料,但是籍貫、住址和聯絡人為不常用資料
如果每次查詢都是查詢所有資料,不常用的資料就會影響效率,實際又不用
常用資訊表:ID(P),姓名,性別,年齡,身高,體重
不常用資訊表:ID(P),籍貫,家庭住址,緊急聯絡人

解決方案:將常用的和不常用的資訊分享儲存,分成兩張表
不常用資訊表和常用資訊表,保證不常用資訊表與常用資訊表能夠對應上:找一個具有唯一性的
欄位來共同連線兩張表。
一個常用表中的一條記錄永遠只能在一張不常用表中匹配一條記錄,反之亦然。
一對多		
一張表中有一條記錄可以對應另外一張表中的多條記錄;但是反過來,另外一張表的一條記錄
只能對應第一張表的一條記錄,這種關係就是一對多或多對一
母親與孩子的關係:母親,孩子兩個實體
母親表:ID(P),名字,年齡,性別
孩子表:ID(P),名字,年齡,性別
以上關係:一個媽媽可以在孩子表中找到多條記錄(也可能是一條),但是一個孩子只能找到一個媽媽
是一種典型的一對多的關係。
但是以上設計:解決了實體的設計表問題,但是沒有解決關係問題,孩子找不到母親,母親也找不到孩子

解決方案:在某一張表中增加一個欄位,能夠找到另外一張表中的記錄:在孩子表中增加一個欄位
指向母親表,因為孩子表的記錄只能匹配到一條母親表的記錄。
母親表:ID(P),名字,年齡,性別
孩子表:ID(P),名字,年齡,性別,母親表ID(母親表主鍵)
多對多
一對錶中(A)的一條記錄能夠對應另外一張表(B)中的多條記錄;同時B表中的一條記錄
也能對應A表中的多條記錄

老師和學生
老師表 T_ID(P),姓名,性別
學生表 S_ID(P),姓名,性別
以上設計方案:實現了實體的設計,但是沒有維護實體的關係
一個老師教過多個學生,一個學生也被多個老師教過

解決方案:增加一張中間關係表
老師與學生的關係表:ID(P),T_ID,S_ID 
老師表與中間表形成一對多的關係,而中間表是多表;維護了能夠唯一找到一表的關係;
同樣的學生表與中間表也是一個一對多的關係; 
學生找老師:找出學生ID--->中間表尋找匹配記錄(多條)--->老師表匹配(一條)
老師找學生:找出老師ID--->中間表尋找匹配記錄(多條)--->學生表匹配(一條)