ER圖是啥?

文章轉載自「開發者圓桌」一個關於開發者入門、進階、踩坑的微信公衆號數據庫

E-R圖也稱實體-聯繫圖(Entity Relationship Diagram),提供了表示實體類型、屬性和聯繫的方法,用來描述現實世界的概念模型。微信

 

用矩形表示實體型,矩形框內寫明實體名;用橢圓表示實體的屬性,並用無向邊將其與相應的實體型鏈接起來;用菱形表示實體型之間的聯繫,在菱形框內寫明聯繫名,並用無向邊分別與有關實體型鏈接起來,同時在無向邊旁標上聯繫的類型(1:1,1:n或m:n)。編碼

 

實體聯繫模型,是概念數據模型的高層描述所使用的數據模型或模式圖,它爲表述這種實體聯繫模式圖形式的數據模型提供了圖形符號。spa

 

下面是一個最多見的ER圖,基本上只要講解ER圖就會碰到它。設計

 

通俗的講,ER圖是把現實生活中的各類關係,以圖片的形式,抽象出來,造成一個思惟導圖,經過ER圖能夠了解現實中的各類關係,好比一個班有不少學生組成。blog

 

ER圖的應用,最最難的地方我以爲是抽象思惟能力,你須要把現實生活中各類關係映射到大腦裏面,而後以ER圖的形式輸出可分析和可視化的東西。圖片

 

經過實例來拆解ER圖ip

 

1、學校裏的那點事兒開發

 

現實生活it

 

一個班級有N多的學生組成,每一個班級有一個班級號,每一名學生有一個學號;學生能夠根據本身的興趣愛好選修課程,對於選修的課程須要考試,而後出成績有學分;一名老師能夠教授幾門課程。

 

ER圖

 

經過現實的描述分解出幾個實體,分別爲班級、學生、課程、教師。出現了幾組關係,分別爲一個班級由多名學生組成(1對多)、一名學生能夠選多門課程,同時一門課程可能被多名學生選修(多對多)、一名教師可傳授多門課程,同時一門課程可能被多名教師傳授(多對多)。這個場景裏面沒有一對一的關係。

 

關係數據庫

 

ER圖畫出來之後,如何映射到關係數據庫中的表呢?這一步就很是簡單了,分步驟進行建立:把實體映射爲表、把關係映射爲表。實體映射爲表,比較簡單,再也不贅述。

 

關係映射爲表,相對來講比較複雜,以這裏的ER圖爲例,存在1對多和多對多兩類關係。

 

1對多或者多對1時,在多方添加一個外鍵,對應到1方,如學生表裏的所在班級這個外鍵。多對多時,須要新增一個關係表,把兩個實體間的關係記錄下來,好比下面的學生選課關係表、教師任課關係表。根據ER圖建立表以下:

 

班級表(主鍵:班級號 )


班級號 班級名 專業 人數

C001   動漫一班 動漫設計  60

C002   動漫二班 動漫設計  80

C003   計算一班 計算機應用 70

 

學生表(主鍵:學號,外鍵:所在班級 )


學號 姓名 性別 年齡 所在班級

S001 小明 男  20 C001

S002 小王 女  19 C002

S003 小朱 男  21 C003

 

 

課程表(主鍵:課程號)


課程號 課程名 課時 學分 

K001 PS  20 5

K002 瑪雅 25  6

K003 數據庫 30  10

 

教師表(主鍵:編號)


編號 職稱 姓名 性別 年齡

T001 助教 李老師 男  30

T002 講師 朱老師 女  33

T003 教授 王老師 男  43

 

 

學生選課關係表


編號 學號 課程號 成績

SK001 S001 K001  80

SK002 S001 K002  76

SK003 S002 K001  89

SK004 S003 K002  90

 

 

教師任課關係表


編號 教師號 課程號 時間

TK001 T001 K001  16:00

TK002 T001 K002  14:00

TK003 T002 K001  10:00

TK004 T003 K002  15:00

 

2、說說電商

 

現實生活

 

我打開淘寶,登陸個人帳戶,查看了一下昨天下的單快遞到哪裏了,而後又逛了逛,把幾個中意的小家電放到購物車裏面,此次錢不夠了,下次再買,嘿嘿。

 

ER圖

 

經過上面簡短的描述分解出幾個實體,分別爲用戶、訂單、購物車、商品、供應商。出現了幾組關係,分別爲一個用戶會有多個訂單(1對多)、一名用戶只有一個購物車(1對1),一個購物車選購多種商品,同時一個商品可能存在多個用戶的購物車中(多對多)、一個供應商能夠供應多種商品,一個商品只能屬於一個供應商(多對1)。

 

關係數據庫

 

同理,根據ER圖映射到數據庫表,實體首先映射,而後再映射關係,1對一、1對多以及多對1以主外鍵的形式進行關係映射,多對多以新增一個關係表來進行關係映射。根據ER圖建立表以下:

 

用戶表(主鍵:用戶ID)


用戶ID 用戶名 密碼 暱稱 身份證

U001   USER01 *** 小馬哥  3729***

U002   USER02 *** 購物狂  1010***

U003   USER03 *** 買買買  3302***

 

訂單表(主鍵:訂單ID,外鍵:用戶ID)


訂單ID 用戶ID 金額 狀態

D001 U001 500¥ 完成

D002 U001 600¥ 派送中

D003 U003 700¥ 待評價

 

 

購物車表(主鍵:購物車ID)


購物車ID 用戶ID 總價 優惠價

C001 U001 50¥    45¥

C002 U002 150¥ 120¥

C003 U003 50¥    40¥

 

供應商表(主鍵:註冊號)


註冊號 名稱 聯繫人

G001 xx電器公司  高先生

G002 yy洗化公司  李先生

G003 zz服裝公司  王先生      

 

 

商品表(主鍵:編碼,外鍵:供應商註冊號)


編碼 名稱 分類 重量  單價  供應商註冊號

P001 熱水壺 家電 1kg 50¥ G001

P002 洗衣粉 洗化 3kg 20¥G001

P003 毛衣     服裝 400g 150¥G002

 

 

選購關係表


編號 購物車ID 商品編碼

X001 C001 P001

X002 C001 P002

X003 C002 P001

X004 C003 P002

 

3、你真的理解1對一、1對多和多對多嗎?

 

要想完全理解這三類關係,不能只讀理論定義,而是從SQL查詢結果出發,來從實踐層面加深理解。

 

1對1,在任意一張表中添加外鍵

 

 

1對1的意思是指第一張表中的某條記錄,根據主外鍵關聯,只能查詢到另外一張表中的0條或者1條記錄,同時表中的全部其餘記錄都知足這個特性,反之亦然。

 

1對1時,須要添加一個外鍵,外鍵添加到任何一張表中均可以。

 

1對多,1方屬於主表,多方屬於從表,在從表添加外鍵

 

 

1對多的意思是指第一張表中的某條記錄,根據主外鍵關聯,能查詢到另外一張表中的0條、1條或者N條記錄,同時表中的全部其餘記錄都知足這個特性,反之是多對1。

 

1對多時,以1方爲主表,多方爲從表,在多方添加一個外鍵。

 

多對多,新增一張關係表

 

多對多的意思是指第一張表中的某條記錄,根據主外鍵關聯,能查詢到另外一張表中的0條、1條或者N條記錄,同時表中的全部其餘記錄都知足這個特性,反之亦然。

 

多對多時,要新增一張關係表,以記錄多對多的數據關係,舉個栗子:

 

課程表(主鍵:課程號)


課程號 課程名 課時 學分 

K001 PS男  20 5

K002 瑪雅 25  6

K003 數據庫 30  10

 

教師表(主鍵:編號)


編號 職稱 姓名 性別 年齡

T001 助教 李老師 男  30

T002 講師 朱老師 女  33

T003 教授 王老師 男  43

 

 

教師任課表(多對多關係衍生出來的表)


編號 教師號 課程號 時間

TK001 T001 K001  16:00

TK002 T001 K002  14:00

TK003 T002 K001  10:00

TK004 T003 K002  15:00



若是你們有興趣,能夠試着分析下面ER圖如何建表,下篇文章公佈答案。

相關文章
相關標籤/搜索