開發(fā)者如果理解ER圖(實體-聯(lián)系圖)?
E-R圖也稱實體-聯(lián)系圖(Entity Relationship Diagram),提供了表示實體類型、屬性和聯(lián)系的方法,用來描述現(xiàn)實世界的概念模型。
用矩形表示實體型,矩形框內(nèi)寫明實體名;用橢圓表示實體的屬性,并用無向邊將其與相應(yīng)的實體型連接起來;用菱形表示實體型之間的聯(lián)系,在菱形框內(nèi)寫明聯(lián)系名,并用無向邊分別與有關(guān)實體型連接起來,同時在無向邊旁標(biāo)上聯(lián)系的類型(1:1,1:n或m:n)。
實體聯(lián)系模型,是概念數(shù)據(jù)模型的高層描述所使用的數(shù)據(jù)模型或模式圖,它為表述這種實體聯(lián)系模式圖形式的數(shù)據(jù)模型提供了圖形符號。
下面是一個最常見的ER圖,基本上只要講解ER圖就會碰到它。
通俗的講,ER圖是把現(xiàn)實生活中的各種關(guān)系,以圖片的形式,抽象出來,形成一個思維導(dǎo)圖,通過ER圖可以了解現(xiàn)實中的各種關(guān)系,比如一個班有很多學(xué)生組成。
ER圖的應(yīng)用,最最難的地方我覺得是抽象思維能力,你需要把現(xiàn)實生活中各種關(guān)系映射到大腦里面,然后以ER圖的形式輸出可分析和可視化的東西。
通過實例來拆解ER圖
一、學(xué)校里的那點事兒
現(xiàn)實生活
一個班級有N多的學(xué)生組成,每個班級有一個班級號,每一名學(xué)生有一個學(xué)號;學(xué)生可以根據(jù)自己的興趣愛好選修課程,對于選修的課程需要考試,然后出成績有學(xué)分;一名老師可以教授幾門課程。
ER圖
通過現(xiàn)實的描述分解出幾個實體,分別為班級、學(xué)生、課程、教師。出現(xiàn)了幾組關(guān)系,分別為一個班級由多名學(xué)生組成(1對多)、一名學(xué)生可以選多門課程,同時一門課程可能被多名學(xué)生選修(多對多)、一名教師可傳授多門課程,同時一門課程可能被多名教師傳授(多對多)。這個場景里面沒有一對一的關(guān)系。
關(guān)系數(shù)據(jù)庫
ER圖畫出來以后,如何映射到關(guān)系數(shù)據(jù)庫中的表呢?這一步就非常簡單了,分步驟進(jìn)行創(chuàng)建:把實體映射為表、把關(guān)系映射為表。實體映射為表,比較簡單,不再贅述。
關(guān)系映射為表,相對來說比較復(fù)雜,以這里的ER圖為例,存在1對多和多對多兩類關(guān)系。
1對多或者多對1時,在多方添加一個外鍵,對應(yīng)到1方,如學(xué)生表里的所在班級這個外鍵。多對多時,需要新增一個關(guān)系表,把兩個實體間的關(guān)系記錄下來,比如下面的學(xué)生選課關(guān)系表、教師任課關(guān)系表。根據(jù)ER圖創(chuàng)建表如下:
班級表(主鍵:班級號 )
- 班級號 班級名 專業(yè) 人數(shù)
- C001 動漫一班 動漫設(shè)計 60
- C002 動漫二班 動漫設(shè)計 80
- C003 計算一班 計算機(jī)應(yīng)用 70
學(xué)生表(主鍵:學(xué)號,外鍵:所在班級 )
- 學(xué)號 姓名 性別 年齡 所在班級
- S001 小明 男 20 C001
- S002 小王 女 19 C002
- S003 小朱 男 21 C003
課程表(主鍵:課程號)
- 課程號 課程名 課時 學(xué)分
- K001 PS 20 5
- K002 瑪雅 25 6
- K003 數(shù)據(jù)庫 30 10
教師表(主鍵:編號)
- 編號 職稱 姓名 性別 年齡
- T001 助教 李老師 男 30
- T002 講師 朱老師 女 33
- T003 教授 王老師 男 43
學(xué)生選課關(guān)系表
- 編號 學(xué)號 課程號 成績
- SK001 S001 K001 80
- SK002 S001 K002 76
- SK003 S002 K001 89
- SK004 S003 K002 90
教師任課關(guān)系表
- 編號 教師號 課程號 時間
- TK001 T001 K001 16:00
- TK002 T001 K002 14:00
- TK003 T002 K001 10:00
- TK004 T003 K002 15:00
二、說說電商
現(xiàn)實生活
我打開淘寶,登錄我的賬戶,查看了一下昨天下的單快遞到哪里了,然后又逛了逛,把幾個中意的小家電放到購物車?yán)锩妫@次錢不夠了,下次再買,嘿嘿。
ER圖
通過上面簡短的描述分解出幾個實體,分別為用戶、訂單、購物車、商品、供應(yīng)商。出現(xiàn)了幾組關(guān)系,分別為一個用戶會有多個訂單(1對多)、一名用戶只有一個購物車(1對1),一個購物車選購多種商品,同時一個商品可能存在多個用戶的購物車中(多對多)、一個供應(yīng)商可以供應(yīng)多種商品,一個商品只能屬于一個供應(yīng)商(多對1)。
關(guān)系數(shù)據(jù)庫
同理,根據(jù)ER圖映射到數(shù)據(jù)庫表,實體首先映射,然后再映射關(guān)系,1對1、1對多以及多對1以主外鍵的形式進(jìn)行關(guān)系映射,多對多以新增一個關(guān)系表來進(jìn)行關(guān)系映射。根據(jù)ER圖創(chuàng)建表如下:
用戶表(主鍵:用戶ID)
- 用戶ID 用戶名 密碼 昵稱 身份證
- U001 USER01 *** 小馬哥 3729***
- U002 USER02 *** 購物狂 1010***
- U003 USER03 *** 買買買 3302***
訂單表(主鍵:訂單ID,外鍵:用戶ID)
- 訂單ID 用戶ID 金額 狀態(tài)
- D001 U001 500¥ 完成
- D002 U001 600¥ 派送中
- D003 U003 700¥ 待評價
購物車表(主鍵:購物車ID)
- 購物車ID 用戶ID 總價 優(yōu)惠價
- C001 U001 50¥ 45¥
- C002 U002 150¥ 120¥
- C003 U003 50¥ 40¥
供應(yīng)商表(主鍵:注冊號)
- 注冊號 名稱 聯(lián)系人
- G001 xx電器公司 高先生
- G002 yy洗化公司 李先生
- G003 zz服裝公司 王先生
商品表(主鍵:編碼,外鍵:供應(yīng)商注冊號)
- 編碼 名稱 分類 重量 單價 供應(yīng)商注冊號
- P001 熱水壺 家電 1kg 50¥ G001
- P002 洗衣粉 洗化 3kg 20¥G001
- P003 毛衣 服裝 400g 150¥G002
選購關(guān)系表
- 編號 購物車ID 商品編碼
- X001 C001 P001
- X002 C001 P002
- X003 C002 P001
- X004 C003 P002
三、你真的理解1對1、1對多和多對多嗎?
要想徹底理解這三類關(guān)系,不能只讀理論定義,而是從SQL查詢結(jié)果出發(fā),來從實踐層面加深理解。
1對1,在任意一張表中添加外鍵
1對1的意思是指第一張表中的某條記錄,根據(jù)主外鍵關(guān)聯(lián),只能查詢到另一張表中的0條或者1條記錄,同時表中的所有其他記錄都滿足這個特性,反之亦然。
1對1時,需要添加一個外鍵,外鍵添加到任何一張表中都可以。
1對多,1方屬于主表,多方屬于從表,在從表添加外鍵
1對多的意思是指第一張表中的某條記錄,根據(jù)主外鍵關(guān)聯(lián),能查詢到另一張表中的0條、1條或者N條記錄,同時表中的所有其他記錄都滿足這個特性,反之是多對1。
1對多時,以1方為主表,多方為從表,在多方添加一個外鍵。
多對多,新增一張關(guān)系表
多對多的意思是指第一張表中的某條記錄,根據(jù)主外鍵關(guān)聯(lián),能查詢到另一張表中的0條、1條或者N條記錄,同時表中的所有其他記錄都滿足這個特性,反之亦然。
多對多時,要新增一張關(guān)系表,以記錄多對多的數(shù)據(jù)關(guān)系,舉個栗子:
課程表(主鍵:課程號)
- 課程號 課程名 課時 學(xué)分
- K001 PS男 20 5
- K002 瑪雅 25 6
- K003 數(shù)據(jù)庫 30 10
教師表(主鍵:編號)
- 編號 職稱 姓名 性別 年齡
- T001 助教 李老師 男 30
- T002 講師 朱老師 女 33
- T003 教授 王老師 男 43
教師任課表(多對多關(guān)系衍生出來的表)
- 編號 教師號 課程號 時間
- TK001 T001 K001 16:00
- TK002 T001 K002 14:00
- TK003 T002 K001 10:00
- TK004 T003 K002 15:00
如果大家有興趣,可以試著分析下面ER圖如何建表,下篇文章公布答案。
【本文為51CTO專欄作者“朱國立”的原創(chuàng)稿件,轉(zhuǎn)載請通過作者微信公眾號“開發(fā)者圓桌”獲取聯(lián)系和授權(quán)】