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--->中間表尋找匹配記錄(多條)--->學生表匹配(一條)