數據庫是軟件系統中不可或缺的一個組成部分,若能在數據庫工程中好好利用 ER 圖,便能讓您生成高質量的數據庫設計,用於數據庫創建,管理和維護,也為人員間的交流提供了具意義的基礎。
今天,我們將為你深入介紹 ER 圖表。通過閱讀本ERD指南,您將獲得有關 ER 圖和數據庫設計的基本知識和技能。你會學到什么是 ERD,為什么要繪制 ERD,ERD 符號,如何繪制 ERD 等,以及一堆 ERD 示例。
什么是實體關系圖(ERD)?
首先,什么是實體關系圖?
實體關系圖也被稱為 ERD、ER 圖、實體聯系模型、實體聯系模式圖或 ER 模型,是一種用於數據庫設計的結構圖。一幅 ERD 包含不同的符號和連接符,用於顯示兩個重要的資訊: 系統范圍內的主要實體,以及這些實體之間的相互關系。
這也就是為什么它被稱為“實體”“關系”圖 (ERD)啊!
當我們談論 ERD 中的實體時,我們經常提到諸如人員/角色(例如學生),有形商業對象(例如產品),無形商業對象(例如日志)等業務對象。“關系”則是這些實體在系統內的相互關聯。
在典型的 ER 設計中,可以找到諸如圓角矩形和 (Rounded rectangle) 連接符(具有不同樣式的末端)的符號來描述實體,它們的屬性和相互關系。
何時繪制ER圖?
那么,我們該在什么時候繪制ER圖呢?雖然ER模型大多是為展示概念和設計物理數據庫而繪制的,但也有別的用途的,以下是一些典型的用例。
- 數據庫設計 - 直接在數據庫更改數據庫結構會有風險, 為避免破壞數據庫中的數據,我們得仔細規划一切變更。通過繪制 ER 圖來展示數據庫設計意念,您能輕松找出錯誤和識別設計缺陷,並在執行數據庫更改之前作出修正。
- 數據庫調試 - 調試數據庫問題往往具挑戰性,特別是當數據庫包含許多表時,你我編寫復雜的SQL來獲取所需的信息。通過 ERD 來展示數據庫結構,您可以全面地了解整個數據庫的結構。您可以輕松找到實體,查看其屬性並確定與別的實體的關系,有助您更輕松地找出數據庫的問題。
- 數據庫創建和修補 - 像 Visual Paradigm 這樣的 ERD 軟件支持數據庫生成工具,可以通過ER圖來自動生成和修補數據庫。使用這個 ER 圖工具,您的ER設計不再僅僅是一個靜態圖,而是一個真實反映物理數據庫結構的鏡像。
- 幫助收集需求 - 您可以通過繪制 ERD 來表達系統中的高級業務對象以用於確定系統的需求。這種初始模型也可以演化為物理數據庫模型,用於創建關系數據庫,或為創建流程圖和數據流模型提供有力的參考。
ERD 符號指南
ER 圖包含實體,屬性和關系。在本節中,我們將詳細介紹各 ERD 符號。
實體
ERD 實體是一個系統內可定義的事物或概念,如人/角色(例如學生),對象(例如發票),概念(例如簡介)或事件(例如交易)(注:在 ERD 中,術語“實體”通常用來代替“表”,但它們是一樣的)。在考慮實體時,嘗試把它們想成名詞。在 ER 模型中,實體顯示為圓角矩形,其名稱位於上方,其屬性列在實體形狀的主體中。下面的 ERD 示例顯示了 ER 實體的一個用例。
實體屬性
也稱為列 (Row),意思是持有它的實體的屬性或特性。
一個屬性有一個描述屬性的名稱和一個描述屬性種類的類型,例如代表字符串的 varchar,整數的 int。當為物理數據庫開發繪制 ERD 時,得使用目標 RDBMS 支持的類型,以確保設計和物理數據庫的一致性。
下面的 ER 圖示例顯示了一個包含屬性的實體。
主鍵 (Primary Key)
主鍵又稱 PK,是一種特殊的實體屬性,用於界定數據庫表中的記錄的獨特性。一個表不能有兩筆(或更多)擁有相同的主鍵屬性值的記錄,像是身份證明內的 ID 便是典型的例子,兩個人即使性名相同,ID 是不會一樣,若身份證明是個表,那ID 便是主鍵了。下面的 ERD 示例顯示了擁有主鍵屬性 “ID” 的實體 “Product”,以及數據庫中表記錄的預覽。第三個記錄是無效的,因為 ID 'PDT-0002' 的值已被另一個記錄使用。
外鍵 (Foreign Key)
外鍵又稱外來鍵和外部鍵,是對主鍵的引用,用於識別實體之間的關系。請注意,有別於主鍵,外鍵不必是唯一的,多個記錄可以共享相同的值。下面的 ER Diagram 示例顯示了一個包含一些列的實體,其中一個外鍵用於引用另一個實體。
關系
兩個實體之間的關系表示這兩個實體以某種方式相互關聯。例如,學生可能參加課程。實體“學生”因此與“課程”相關,而這關系則在 ER 圖中以連接線表達着。
基數 (Cardinality)
基數定義了一個實與另一個實體的關系里面,某方可能出現次數。例如,一個團隊有許多球員,若把這關系呈現於 ERD 時,團隊和球員之間是一對多的關系。
在 ER 圖中,基數表示為連接線端的烏鴉腳。三種常見的主要關系是一對一,一對多和多對多。
一對一的基數的例子
一對一關系主要用於將實體分成兩部分,簡潔地將資訊呈現,使讀者更容易理解。下圖顯示了一對一關系的示例。
一對多的基數的例子
一對多關系是指兩個實體 X 和 Y 之間的關系,其中 X 的一個實例可以鏈接到Y的許多實例,而 Y 的一個實例僅鏈接到 X 的一個實例。下圖顯示了一對多關系的一個例子。
多對多的基數的例子
多對多關系是指兩個實體 X 和 Y 之間的關系,其中 X 可以被鏈接到 Y 的許多實例,反之亦然。下圖顯示了一個多對多關系的例子。請注意,多對多關系在物理 ERD 中被分成一對一對多的關系,你會在下一節中學到什麼是物理 ERD。
概念,邏輯和物理數據模型
ER 模型通常被繪制成最多三個抽象層次上:
雖然 ER 模型的三個層次都包含有屬性和關系的實體,但它們的創建目的和目標受眾都不同。
一般而言,業務分析人員使用概念和邏輯模型來展示系統中存在的業務對象 (Business Object),而數據庫設計人員或數據庫工程師會為概念和邏輯ER模型加入更詳細的資訊,進而生成反映物理模型結構的物理數據模型,好為創建數據庫作準備。下表列出了三種數據模型之間的差異。
概念模型 vs 邏輯模型 vs 數據模型:
ERD功能 | 概念 | 邏輯 | 物理 |
---|---|---|---|
實體(名稱) | 是 | 是 | 是 |
關系 | 是 | 是 | 是 |
列 | 是 | 是 | |
列的類型 | 隨意 | 是 | |
主鍵 | 是 | ||
外鍵 | 是 |
概念數據模型
概念性 ERD 表達了系統中該存在的業務對象以及它們之間的關系。建立概念模型,是為了通過識別所涉及的業務對象來呈現系統的宏觀圖像。概念數據模型定義了哪些實體存在,而非哪些表。例如,邏輯或物理數據模型中可能存在“多對多”表,但在概念數據模型下,它們只會表示為無基數的關系。
概念數據模型示例
注意:概念性 ERD 支持使用泛化 (Generalization) 來表達兩個實體之間的“一種”關系,例如三角形是一種形狀,這個用法就像UML中的泛化一樣。請注意只有概念 ERD 支持泛化。
邏輯數據模型
邏輯 ERD 是概念 ERD 的詳細版本,通過明確定義每個實體中的列並引入操作和事務實體 (Transactional Entities)來讓概念模型豐富起來。雖然邏輯數據模型仍流於高層次的設計(非為特定數據庫系統而繪畫),但如果會影響數據庫的設計,在繪制邏輯數據模型時仍然可酌情調整。
邏輯數據模型示例
物理數據模型
物理 ERD 是數據庫的實際設計藍圖。物理數據模型通過為每列指定類型 (Type),長度 (Length),可為空 (Nullable) 等來詳細闡述邏輯數據模型。由於物理 ERD 表達了如何在特定的 DBMS中構造和關聯數據,因此在設計時要考慮到實際的數據庫系統的需要和局限,倒如確保 DBMS 支持某列類型,並在命名實體和列中避用某些保留字 (Reserved Words)。
物理數據模型示例
如何繪制 ER 圖?
如果您發現繪制 ER 圖很難,請不要擔心,在本節中我們將給你一些 ERD 提示。嘗試按照以下步驟以了解如何有效地繪制 ER 圖吧。
- 確保你清楚知道繪制 ERD 的目的。您是否試圖呈現涉及業務對象定義的整體系統架構?或者你正在開發一個准備用於數據庫創建的 ER 模型?您必須明了開發 ER 圖的目的,方可使用合適的模型層次(概念/邏輯和物理)來迎合您所需 (請閱讀概念,邏輯和物理數據模型部分了解更詳細信息)
- 確保你清楚模型的范圍。了解建模范圍可以防止在設計中包含冗余實體和關系。
- 畫出范圍內的主要實體。
- 通過添加列來定義實體的屬性。
- 仔細檢查 ERD 並檢查實體和列是否足以存儲系統的數據。如果不是,請考慮添加其他實體和列。通常,您可以在此步驟中確定一些事務 (Transactional),操作 (Operational) 和事件 (Event) 實體。
- 考慮所有實體之間的關系,將它們聯系起來,並寫上正確的基數(例如客戶和訂單之間的一對多關系)。如果有任何實體沒有被連接上,請不要擔心,雖然這不常見,但它是合法的。
- 使用數據庫規范化技術 (Database Normalization)重構實體,以減少冗余數據和提高數據完整性。例如,“制造商”的資訊可能最初存儲在“產品”實體下,透過規范化過程,您可能會發“制造商”的記錄不斷重復,您便可將其拆分為單獨的“制造商”實體,並使用外鍵將“產品”和“制造商”連接起來。
數據模型的例子
ERD 示例 - 電影租賃系統
ERD 示例 - 貸款系統
ERD 示例 - 在線商店
使用ERD和數據流圖(DFD)
在系統分析和設計中,可以繪制數據流圖(DFD) 來展現系統流程中的信息流。在數據流圖中,有一個名為數據儲存 (Data Store)的符號,它代表一個提供系統所需信息的數據庫表。
由於物理 ER 圖提供了實際數據庫的藍圖,因此這種 ERD 中的實體與 DFD 中的數據存儲一致。您可以 ERD 作為 DFD 的補充,以表達信息的結構;或以 DFD 補充 ERD,以顯示系統在運行時如何運用數據。
使用ERD和BPMN業務流程圖(BPD)
在業務流程映射中 (Business Process Mapping),可以繪制 BPMN 業務流程圖 (BPD) 以展示業務工作流程。在業務流程圖中,有一個稱為數據對象(Data Object)的符號,表示在流程輸入/輸出的數據。
由於概念和邏輯數據模型提供了系統內業務對象的高級視圖,因此此類 ERD 中的實體與 BPD 中的數據對象一致。您可繪制 ERD 作為 BPD 的補充,以表示業務工作流程所需的數據對象的結構;或以 BPD 補充 ERD,以顯示在整個業務流程中如何運用數據。
https://www.visual-paradigm.com/cn/download/community.jsp?platform=windows&arch=64bit&install=no
下載社區免安裝版。