1. 摘要
您將獲得關(guān)于ER圖和數(shù)據(jù)庫設(shè)計(jì)的基本知識(shí)和技能。你會(huì)學(xué)到ERD是什么涂身,為什么吮炕,ERD符號(hào),如何畫ERD访得,等等,以及一些ERD的例子陕凹。
2.內(nèi)容
2.1 ERD定義
實(shí)體 - 關(guān)系(ER)圖(也稱為ERD或ER模型)是Peter最初在1976年提出的經(jīng)典且流行的概念數(shù)據(jù)模型悍抑。它是系統(tǒng)內(nèi)不同實(shí)體的視覺表示以及它們?nèi)绾蜗嗷リP(guān)聯(lián)。實(shí)體關(guān)系圖廣泛用于設(shè)計(jì)關(guān)系數(shù)據(jù)庫杜耙。ER模式中的實(shí)體成為表搜骡,屬性和轉(zhuǎn)換的數(shù)據(jù)庫模式。由于它們可用于可視化數(shù)據(jù)庫表及其關(guān)系佑女,因此它通常也用于數(shù)據(jù)庫故障排除记靡。
ER-Diagrams有三個(gè)基本要素:
- 實(shí)體是我們想要存儲(chǔ)信息的“事物”。實(shí)體是一個(gè)人团驱,地點(diǎn)摸吠,事物或事件。
- 屬性是我們要為權(quán)利收集的數(shù)據(jù)嚎花。
- 關(guān)系描述了實(shí)體之間的關(guān)系寸痢。
2.2 什么時(shí)候畫ER圖?
什么時(shí)候畫erd ?雖然ER模型主要用于在概念可視化和物理數(shù)據(jù)庫設(shè)計(jì)方面設(shè)計(jì)關(guān)系數(shù)據(jù)庫,但是在其他情況下紊选,ER圖也可以提供幫助啼止。下面是一些典型的用例。
2.2.1 數(shù)據(jù)庫設(shè)計(jì)
——根據(jù)變化的規(guī)模兵罢,直接在DBMS中更改數(shù)據(jù)庫結(jié)構(gòu)可能有風(fēng)險(xiǎn)献烦。為了避免破壞生產(chǎn)數(shù)據(jù)庫中的數(shù)據(jù),仔細(xì)計(jì)劃更改是很重要的卖词。ERD是一個(gè)有用的工具巩那。通過繪制ER圖來可視化數(shù)據(jù)庫設(shè)計(jì)思想,您有機(jī)會(huì)識(shí)別錯(cuò)誤和設(shè)計(jì)缺陷,并在數(shù)據(jù)庫中執(zhí)行更改之前進(jìn)行更正拢操。
2.2.2 數(shù)據(jù)庫調(diào)試
——調(diào)試數(shù)據(jù)庫問題很有挑戰(zhàn)性锦亦,特別是當(dāng)數(shù)據(jù)庫包含許多表時(shí),需要編寫復(fù)雜的SQL來獲取所需的信息令境。通過使用ERD可視化數(shù)據(jù)庫模式杠园,您可以全面了解整個(gè)數(shù)據(jù)庫模式。您可以輕松地定位實(shí)體舔庶、查看它們的屬性并確定它們與其他實(shí)體之間的關(guān)系抛蚁。所有這些都允許您分析現(xiàn)有數(shù)據(jù)庫并更容易地發(fā)現(xiàn)數(shù)據(jù)庫問題。
2.2.3 數(shù)據(jù)庫創(chuàng)建和補(bǔ)丁
—Visual Paradigm是一個(gè)ERD工具惕橙,它支持一個(gè)數(shù)據(jù)庫生成工具瞧甩,可以通過ER圖的方式自動(dòng)創(chuàng)建和補(bǔ)丁數(shù)據(jù)庫。因此弥鹦,有了這個(gè)ER圖工具肚逸,ER設(shè)計(jì)就不再是一個(gè)靜態(tài)的圖,而是反映物理數(shù)據(jù)庫結(jié)構(gòu)的一面鏡子彬坏。
2.2.4 幫助收集需求
——通過繪制描述系統(tǒng)高級(jí)業(yè)務(wù)對(duì)象的概念性ERD來確定信息系統(tǒng)的需求朦促。這樣的初始模型還可以演化為物理數(shù)據(jù)庫模型,以幫助創(chuàng)建關(guān)系數(shù)據(jù)庫栓始,或幫助創(chuàng)建流程圖和數(shù)據(jù)流模式务冕。
2.3 ERD符號(hào)指南
ER圖包含實(shí)體、屬性和關(guān)系幻赚。在這一節(jié)中禀忆,我們將詳細(xì)討論ERD符號(hào)。
2.3.1 實(shí)體
ERD實(shí)體是一個(gè)系統(tǒng)內(nèi)可定義的事物或概念落恼,例如人/角色(例如學(xué)生)箩退、對(duì)象(例如發(fā)票)、概念(例如概要)或事件(例如交易)(注:在ERD中佳谦,術(shù)語“實(shí)體”經(jīng)常被用來代替“表”乏德,但它們是相同的)。在確定實(shí)體時(shí)吠昭,將它們視為名詞喊括。在ER模型中,實(shí)體顯示為圓角矩形矢棚,其名稱位于頂部郑什,其屬性列在實(shí)體形狀的主體中。下面的ERD示例顯示了一個(gè)ER實(shí)體的示例蒲肋。
2.3.2 實(shí)體屬性
屬性也稱為列蘑拯,是持有它的實(shí)體的屬性或特征钝满。
屬性具有描述屬性的名稱和描述屬性類型的類型,如字符串的varchar和整數(shù)的int申窘。在為物理數(shù)據(jù)庫開發(fā)繪制ERD時(shí)弯蚜,務(wù)必確保使用目標(biāo)RDBMS支持的類型。
下面的ER關(guān)系圖示例顯示了一個(gè)包含一些屬性的實(shí)體剃法。
2.3.3 主鍵
主鍵是一種特殊的實(shí)體屬性碎捺,它惟一地定義了數(shù)據(jù)庫表中的一條記錄。換句話說贷洲,不能有兩個(gè)(或多個(gè))記錄共享主鍵屬性的相同值收厨。下面的ERD示例顯示了具有主鍵屬性“ID”的實(shí)體“Product”,以及數(shù)據(jù)庫中表記錄的預(yù)覽优构。第三條記錄無效诵叁,因?yàn)榱硪粭l記錄已經(jīng)使用了ID 'PDT-0002'的值。
2.3.4 外鍵
外鍵也稱為FK钦椭,是對(duì)表中主鍵的引用拧额。它用于標(biāo)識(shí)實(shí)體之間的關(guān)系。注意彪腔,外鍵不一定是唯一的侥锦。多條記錄可以共享相同的值。下面的ER關(guān)系圖示例顯示了一個(gè)具有一些列的實(shí)體漫仆,其中外鍵用于引用另一個(gè)實(shí)體。
2.3.5 關(guān)系
兩個(gè)實(shí)體之間的關(guān)系表示這兩個(gè)實(shí)體以某種方式相互關(guān)聯(lián)泪幌。例如盲厌,一個(gè)學(xué)生可能注冊(cè)了一個(gè)課程。因此祸泪,實(shí)體學(xué)生與課程是相關(guān)的吗浩,而一種關(guān)系是連接他們之間的連接器。
2.3.6 基數(shù)
基數(shù)定義一個(gè)實(shí)體中可能出現(xiàn)的事件數(shù)没隘,該實(shí)體與另一個(gè)實(shí)體中可能出現(xiàn)的事件數(shù)相關(guān)聯(lián)懂扼。例如,一個(gè)隊(duì)有很多隊(duì)員右蒲。當(dāng)在ERD中出現(xiàn)時(shí)阀湿,實(shí)體團(tuán)隊(duì)和玩家以一對(duì)多的關(guān)系相互連接。
在ER圖中瑰妄,基數(shù)表示為連接器兩端的魚尾紋陷嘴。三種常見的基本關(guān)系是一對(duì)一、一對(duì)多和多對(duì)多间坐。
2.3.6.1 一對(duì)一的基數(shù)的例子
一對(duì)一關(guān)系主要用于將一個(gè)實(shí)體一分為二灾挨,以提供簡明的信息并使其更易于理解邑退。下圖顯示了一對(duì)一關(guān)系的一個(gè)示例。
2.3.6.2 一對(duì)多的基數(shù)的例子
一對(duì)多關(guān)系是指兩個(gè)實(shí)體X和Y之間的關(guān)系劳澄,其中X的一個(gè)實(shí)例可能鏈接到Y(jié)的多個(gè)實(shí)例地技,而Y的一個(gè)實(shí)例只鏈接到X的一個(gè)實(shí)例。
2.3.6.3 多對(duì)多的基數(shù)的例子
多對(duì)多關(guān)系是指兩個(gè)實(shí)體X和Y之間的關(guān)系秒拔,其中X可以鏈接到Y(jié)的多個(gè)實(shí)例莫矗,反之亦然。下圖顯示了一個(gè)多對(duì)多關(guān)系的示例溯警。注意趣苏,在物理ERD中,多對(duì)多關(guān)系被分割為一對(duì)一對(duì)多關(guān)系梯轻。在下一節(jié)中食磕,您將了解什么是物理ERD。
2.4 概念喳挑、邏輯和物理數(shù)據(jù)模型
ER模型通常是在三個(gè)抽象層次上繪制的:
- 概念ERD /概念數(shù)據(jù)模型
- 邏輯ERD /邏輯數(shù)據(jù)模型
- 物理ERD /物理數(shù)據(jù)模型
雖然ER模型的所有三個(gè)級(jí)別都包含具有屬性和關(guān)系的實(shí)體彬伦,但是它們?cè)趧?chuàng)建的目的和目標(biāo)受眾方面有所不同。
2.4.1 概念數(shù)據(jù)模型
概念性的ERD對(duì)系統(tǒng)中應(yīng)該存在的業(yè)務(wù)對(duì)象及其之間的關(guān)系進(jìn)行建模伊诵。開發(fā)了一個(gè)概念模型单绑,通過識(shí)別所涉及的業(yè)務(wù)對(duì)象來呈現(xiàn)系統(tǒng)的總體情況。它定義了哪些實(shí)體存在曹宴,而不是哪些表搂橙。例如,“多對(duì)多”表可能存在于邏輯或物理數(shù)據(jù)模型中笛坦,但在概念數(shù)據(jù)模型中区转,它們只是作為沒有基數(shù)的關(guān)系顯示。
注意:概念性ERD支持在建模兩個(gè)實(shí)體之間的“一種”關(guān)系時(shí)使用泛化版扩,例如废离,三角形是一種形狀。這種用法類似于UML中的泛化礁芦。注意蜻韭,只有概念性的ERD支持泛化。
2.4.2 邏輯數(shù)據(jù)模型
邏輯ERD是概念ERD的詳細(xì)版本柿扣。通過顯式定義每個(gè)實(shí)體中的列并引入操作實(shí)體和事務(wù)實(shí)體肖方,可以開發(fā)邏輯ER模型來豐富概念模型。雖然邏輯數(shù)據(jù)模型仍然獨(dú)立于將要?jiǎng)?chuàng)建數(shù)據(jù)庫的實(shí)際數(shù)據(jù)庫系統(tǒng)未状,但是如果它影響設(shè)計(jì)窥妇,您仍然可以考慮這一點(diǎn)。
2.4.3 物理數(shù)據(jù)模型
物理ERD表示關(guān)系數(shù)據(jù)庫的實(shí)際設(shè)計(jì)藍(lán)圖娩践。物理數(shù)據(jù)模型通過為每個(gè)列分配類型活翩、長度烹骨、可空值等來詳細(xì)說明邏輯數(shù)據(jù)模型。由于物理ERD表示在特定DBMS中數(shù)據(jù)應(yīng)該如何結(jié)構(gòu)化和關(guān)聯(lián)材泄,因此考慮實(shí)際數(shù)據(jù)庫系統(tǒng)的約定和限制是很重要的沮焕。確保DBMS支持列類型,并且在命名實(shí)體和列時(shí)不使用保留字拉宗。
2.5 如何繪制ER圖?
如果你發(fā)現(xiàn)很難開始畫ER圖峦树,不要擔(dān)心。在這一節(jié)中旦事,我們將為您提供一些ERD技巧魁巩。嘗試按照下面的步驟來理解如何有效地繪制ER圖。
確定你清楚繪制ERD的目的姐浮。
您是否試圖呈現(xiàn)涉及業(yè)務(wù)對(duì)象定義的整個(gè)系統(tǒng)體系結(jié)構(gòu)?或者您正在開發(fā)一個(gè)為數(shù)據(jù)庫創(chuàng)建準(zhǔn)備好的ER模型嗎?您必須清楚在適當(dāng)?shù)募?xì)節(jié)級(jí)別開發(fā)ER關(guān)系圖的目的(有關(guān)更多細(xì)節(jié)谷遂,請(qǐng)閱讀“概念、邏輯和物理數(shù)據(jù)模型”一節(jié))確保您清楚要建模的范圍卖鲤。
了解建模范圍可以防止在設(shè)計(jì)中包含冗余實(shí)體和關(guān)系肾扰。繪制范圍中涉及的主要實(shí)體。
通過添加列來定義實(shí)體的屬性蛋逾。
仔細(xì)檢查ERD集晚,檢查實(shí)體和列是否足夠存儲(chǔ)系統(tǒng)的數(shù)據(jù)。
如果沒有区匣,則考慮添加其他實(shí)體和列偷拔。通常,您可以在此步驟中標(biāo)識(shí)一些事務(wù)亏钩、操作和事件實(shí)體莲绰。考慮所有實(shí)體之間的關(guān)系,并使用適當(dāng)?shù)幕鶖?shù)铸屉。
(e實(shí)體客戶和訂單之間的一對(duì)多關(guān)系)钉蒲。不要擔(dān)心是否存在孤兒實(shí)體切端。雖然不常見彻坛,但卻是合法的。應(yīng)用數(shù)據(jù)庫規(guī)范化技術(shù)以減少數(shù)據(jù)冗余和提高數(shù)據(jù)完整性的方式重構(gòu)實(shí)體踏枣。
例如昌屉,制造商的詳細(xì)信息最初可能存儲(chǔ)在Product實(shí)體下。在規(guī)范化的過程中茵瀑,您可能會(huì)發(fā)現(xiàn)詳細(xì)信息會(huì)重復(fù)記錄间驮,然后您可以將其作為單獨(dú)的實(shí)體制造商進(jìn)行拆分,并使用一個(gè)外鍵在產(chǎn)品和制造商之間進(jìn)行鏈接马昨。
2.6 選擇ERD工具
(1) Visual Paradigm
使用ERD開發(fā)數(shù)據(jù)模型需要時(shí)間和精力竞帽。一個(gè)有用的數(shù)據(jù)庫設(shè)計(jì)工具應(yīng)該能夠減少您所花費(fèi)的時(shí)間和精力扛施。Visual Paradigm不僅為您提供了ERD工具,還提供了一組可視化建模功能屹篓,幫助您更快疙渣、更輕松地繪制圖形。它支持當(dāng)今市場(chǎng)上大多數(shù)流行的關(guān)系數(shù)據(jù)庫管理系統(tǒng)堆巧,包括數(shù)據(jù)庫設(shè)計(jì)妄荔、數(shù)據(jù)庫生成和ERD反轉(zhuǎn)。
(2)freedgo.com
一款在線ER模型生成的工具谍肤,可以針對(duì)多種數(shù)據(jù)庫的DDL文件在線生成ER模型圖表啦租,支持MySQL、SQLServer荒揣、Oracle篷角、PostgreSQL等數(shù)據(jù)庫。
主要功能如下:
(1)支持表的創(chuàng)建乳附,同時(shí)可以根據(jù)數(shù)據(jù)庫的類型不同編輯表結(jié)構(gòu)内地、字段類型、主鍵赋除、默認(rèn)值阱缓、索引、備注信息等等
(2)支持視圖举农,觸發(fā)器荆针,sequence,存儲(chǔ)過程颁糟,函數(shù)的查看及編輯
(3)同步生成SQL供用戶操作
參考:
http://www.reibang.com/p/ffc08f2c2a92
https://www.freedgo.com
3. 參考
(1)「數(shù)據(jù)架構(gòu)」什么是實(shí)體關(guān)系圖(ERD)?
https://cloud.tencent.com/developer/article/1558816
(2)數(shù)據(jù)庫建模 : 概念模型 , 邏輯模型和物理模型
https://blog.csdn.net/tojohnonly/article/details/88343166
(3)【知識(shí)】一款支持MySQL的在線免費(fèi)ER模型設(shè)計(jì)工具freedgo
http://www.reibang.com/p/ffc08f2c2a92