中間表跟兩張表都分別是一對多關係,中間表是多,兩張表分別是1.原因是乙個教師在中間表中可以有多個t_id(教師t_id),而乙個t_id只能對應乙個教師。
2.外來鍵可以是一對一的,乙個表的記錄只能與另乙個表的一條記錄連線,或者是一對多的,乙個表的記錄與另乙個表的多條記錄連線。
1.一對多,在多的一方建立外來鍵(外來鍵指向一的主鍵)
母親與孩子的關係:母親,孩子兩個實體
母親表:id(p),名字,年齡,性別
孩子表:id(p),名字,年齡,性別
以上關係:乙個媽媽可以在孩子表中找到多條記錄(也可能是一條),但是乙個孩子只能找到乙個媽媽
是一種典型的一對多的關係。
但是以上設計:解決了實體的設計表問題,但是沒有解決關係問題,孩子找不到母親,母親也找不到孩子
解決方案:在某一張表中增加乙個字段,能夠找到另外一張表中的記錄:在孩子表中增加乙個字段
指向母親表,因為孩子表的記錄只能匹配到一條母親表的記錄。
母親表:id(p),名字,年齡,性別
孩子表:id(p),名字,年齡,性別,母親表id(母親表主鍵)
2.多對多的關係,是通過中間表。中間表是多的一方,所以多的一方要包含指向一的一方的外來鍵。所以中間表,作為兩邊多的一方,中間表要包含兩邊的外來鍵,兩個外來鍵分別指向兩張表的主鍵。
多對多一對表中(a)的一條記錄能夠對應另外一張表(b)中的多條記錄;同時b表中的一條記錄
也能對應a表中的多條記錄
老師和學生
老師表 t_id(p),姓名,性別
學生表 s_id(p),姓名,性別
以上設計方案:實現了實體的設計,但是沒有維護實體的關係
乙個老師教過多個學生,乙個學生也被多個老師教過
解決方案:增加一張中間關係表
老師與學生的關係表:id(p),t_id,s_id
老師表與中間表形成一對多的關係,而中間表是多表;維護了能夠唯一找到一表的關係;
同樣的學生表與中間表也是乙個一對多的關係;
學生找老師:找出學生id--->中間表尋找匹配記錄(多條)--->老師表匹配(一條)
老師找學生:找出老師id--->中間表尋找匹配記錄(多條)--->學生表匹配(一條)
MySQL關係 一對多 一對一 多對多
將實體與實體的關係,反應到最終資料庫表的設計上,將關係分為三種 一對一,一對多 多對一 和多對多,所有的關係都是表與表之間的關係 一對一 一對一 一張表的一條記錄只能與另外一條記錄進行對應,反之亦然 id p 姓名 性別 年齡 身高 婚姻狀況 籍貫 家庭位址 緊急聯絡人 體重 表設計成以上這種形式 ...
Django ORM 一對多 和 多對多
在 models.py 上定義 class province models.model name models.charfield max length 32 def str self return self.name class city models.model name models.char...
mysql左聯一對多 MySQL左連線多對一行
為了簡化我的問題 假設我有3個表.rooms people things id name id name fk rooms id name fk rooms 1 kitchen 1 john 1 1 tv 2 2 bedroom 2 mary 2 2 bed 2 3 andy 1 3 sink 1 ...