天天看點

ER圖

文章轉載自「開發者圓桌」

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

用矩形表示實體型,矩形框内寫明實體名;用橢圓表示實體的屬性,并用無向邊将其與相應的實體型連接配接起來;用菱形表示實體型之間的聯系,在菱形框内寫明聯系名,并用無向邊分别與有關實體型連接配接起來,同時在無向邊旁标上聯系的類型(1:1,1:n或m:n)。

實體聯系模型,是概念資料模型的高層描述所使用的資料模型或模式圖,它為表述這種實體聯系模式圖形式的資料模型提供了圖形符号。

下面是一個最常見的ER圖,基本上隻要講解ER圖就會碰到它。

通俗的講,ER圖是把現實生活中的各種關系,以圖檔的形式,抽象出來,形成一個思維導圖,通過ER圖可以了解現實中的各種關系,比如一個班有很多學生組成。

ER圖的應用,最最難的地方我覺得是抽象思維能力,你需要把現實生活中各種關系映射到大腦裡面,然後以ER圖的形式輸出可分析和可視化的東西。

通過執行個體來拆解ER圖

一、學校裡的那點事兒

現實生活

一個班級有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

二、說說電商

現實生活

我打開淘寶,登入我的賬戶,檢視了一下昨天下的單快遞到哪裡了,然後又逛了逛,把幾個中意的小家電放到購物車裡面,這次錢不夠了,下次再買,嘿嘿。

ER圖

ER圖

通過上面簡短的描述分解出幾個實體,分别為使用者、訂單、購物車、商品、供應商。出現了幾組關系,分别為一個使用者會有多個訂單(1對多)、一名使用者隻有一個購物車(1對1),一個購物車選購多種商品,同時一個商品可能存在多個使用者的購物車中(多對多)、一個供應商可以供應多種商品,一個商品隻能屬于一個供應商(多對1)。

關系資料庫

同理,根據ER圖映射到資料庫表,實體首先映射,然後再映射關系,1對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

三、你真的了解1對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圖

UML 圖表

可以使用UML圖表進行渲染。 Mermaid. 例如下面産生的一個序列圖:

這将産生一個流程圖。:

  • 關于 Mermaid 文法,參考 這兒,

FLowchart流程圖

我們依舊會支援flowchart的流程圖:

  • 關于 Flowchart流程圖 文法,參考 這兒.

導出與導入

導出

如果你想嘗試使用此編輯器, 你可以在此篇文章任意編輯。當你完成了一篇文章的寫作, 在上方工具欄找到 文章導出 ,生成一個.md檔案或者.html檔案進行本地儲存。

導入

如果你想加載一篇你寫過的.md檔案,在上方工具欄可以選擇導入功能進行對應擴充名的檔案導入,

繼續你的創作。