文章轉載自「開發者圓桌」一個關於開發者入門、進階、踩坑的微信公衆號數據庫
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圖如何建表,下篇文章公佈答案。