將實體與實體的關係,反映到最終資料庫的設計上來:講關係分為三種:一對
一、一對多(多對一)和多對多。
所有的關係都是指表與表之間的關係。
1、一對一
一對一:一張表的一條記錄只能與另外一張表的一條記錄進行對應;反之亦然。
學生表:姓名,性別,年齡,身高,體重,籍貫,家庭住址,緊急聯絡人
表設計成以上形式,符合要求,其中姓名,性別,年齡,身高,體重屬於常用資料,但是籍貫,位址,緊急聯絡人屬於不常用資料,如果每次查詢都是查詢所有資料,不常用的資料就會影響效率,實際又不用。
解決方案:將常用的和不常用的資訊分離儲存,分成兩張表
常用資訊表
不常用資訊表:保證不常用資訊與常用資訊一定能夠對應上:找乙個具有唯一性(確定記錄)的字段來共同連線兩張表,即在不常用表中增加id。
乙個常用表的一條記錄,永遠只能在一張不常用表中匹配一條記錄,反過來,乙個不常用表的一條記錄也只能匹配一條記錄:一對一關係。
2、一對多
一對多:一張表中有一條記錄可以對應另外一張表的多條記錄,但是反過來,另外一張表的一條記錄只能對應第一張表的一條記錄,這種關係就是一對多或者多對一。
母親與孩子的關係:母親、孩子兩個實體
媽媽表:id(p)、名字、年齡、性別
孩子表:id(p)、名字、年齡、性別
以上關係:乙個媽媽可以在孩子表中找到多條記錄(也可能是一條),但是乙個孩子只能找到乙個媽媽,是一種典型的一對多的關係。
但是以上涉及,解決了實體的設計表問題,但是沒有解決關係問題,孩子找不到媽媽,媽媽也找不到孩子。
解決方案:在某張表中增加乙個字段,能夠找到另外一張表中的記錄:應該在孩子表中增加乙個字段指向媽媽表:因為孩子表的記錄只能匹配到一條媽媽表的記錄。
媽媽表:id(p)、名字、年齡、性別
孩子表:id(p)、名字、年齡、性別、媽媽id
3、多對多
多對多:一張表中(a)的一條記錄能夠對應另一張表中(b)的多條記錄,通知b表中的一條記錄也能對應a表中的多條記錄:多對多的關係。
老師教學、老師和學生
老師表
t_id(p) 姓名 性別
1 a 男
2 b 女
學生表s_id(p) 姓名 性別
1 張三 男
2 小芳 女
以上設計方案:實現了實體的設計,但是沒有維護實體的關係。
乙個老師教過多個學生;乙個學生也被多個老師教過。
解決方案:在學生表中新增老師字段,不管在哪張表中新增字段,都會出現乙個問題:該字段要儲存多和資料,而且是與其他表有關係的字段,不符合表設計規範,增加一張新錶:專門維護兩張表之間的關係。
老師表
t_id(p) 姓名 性別
1 a 男
2 b 女
學生表s_id(p) 姓名 性別
1 張三 男
2 小芳 女
中間關係表:老師與學生的關係
id t_id(老師) s_id(學生)
1 1 1
2 1 2
3 2 1
4
增加中間表之後,中間表與老師表形成了一對多的關係;而且中間表是多表,維護了能夠唯一找到一表的關係;同樣的,學生表與中間表也是一對多的關係,一對多的關係可以匹配到關聯表之間的資料。
學生找老師: 找出學生id-》中間表尋找匹配記錄(多條)-》老師表匹配(一條)
老師找學生: 找出老師id-》中間表尋找匹配記錄(多條)-》學生表匹配(一條)。
關係型資料庫之索引
索引,在我們的mysql中的也叫key,是儲存引擎中用於快速找到記錄的一種資料結構。這是索引的基本功能,當然,索引還有一些別的屬性。但是 高效能mysql 這本書上並沒有講清楚乙個事情,那就是索引和主鍵的區別。主鍵一定是唯一性索引,唯一性索引並不一定就是主鍵。我來來具體的東西說吧,書大家都看過吧,看...
資料庫 關係型資料庫
關係型資料庫 使用資料模型建立起來的資料結構。瓶頸 a.對資料庫高併發讀寫的需求 b.對海量資料的高效率儲存和訪問的需求 c.對資料庫的高擴充套件性和高可用性的需求 nosql 全稱 not only sql 非關係型資料庫,目的是使用簡單api進行資料儲存,儲存自由 可以儲存大量資料。特點 a.可...
資料庫 關係型資料庫
資料之間的聯絡也可使用關係來表示增強了關聯式資料庫邏輯檢視的應用。關係是一種數學上的結構,但對於使用者而言,將其看作 表 則更容易理解。表是由行和列構成的二維結構。由於關係模型的建立者 e.f.codd 使用關係作為表的同義詞,因此表也被稱為關係。表是邏輯關係的永久化表示四,即關係的內容可以永久儲存...