Skip to content
Read this post in: de_DEen_USes_ESfr_FRhi_INid_IDjapl_PLpt_PTru_RUvizh_TW
Home » Data Modeling / Database » 掌握實體關係建模:附真實案例的逐步指南(第 4 部分,共 5 部分)

掌握實體關係建模:附真實案例的逐步指南(第 4 部分,共 5 部分)

資料建模與物件導向設計

資料建模與物件導向設計是軟體工程的兩個關鍵組成部分。資料建模旨在表示資料與實體之間的關係,而物件導向設計則著重於建立封裝資料與行為的軟體物件。這兩個概念之間的關係對於建構穩健且可維護的軟體系統至關重要。

在本文中,我們將探討為何資料建模對物件導向設計有所助益、實體與實體關係圖(ERD)如何與類別圖中的物件相關聯,以及資料建模如何協助您發展類別圖。

用於資料建模的實體關係圖(ERD)工具

實體關係圖與類別圖在軟體開發中的互補角色

實體關係圖(ERD)與類別圖都是軟體開發中的重要工具,但它們服務不同的目的,並代表系統設計的不同面向。

ERD 用於以視覺方式表示資料實體及其關係,通常用於軟體開發的早期階段以建立資料結構模型。ERD 顯示不同類型的實體及其相互關係,並可包含關於屬性、主鍵與外鍵,以及基數(cardinality)的資訊。

另一方面,類別圖表示物件導向系統中的類別與物件,並用於建模軟體組件的行為與結構。類別圖顯示類別之間的關係、它們的方法與屬性,以及繼承階層。它們通常用於軟體開發的後期階段,在資料結構已定義並實現之後。

那麼,為何我們在軟體開發中需要同時使用 ERD 與類別圖?主要原因是它們代表系統設計的不同面向,且彼此互補。ERD 有助於設計資料結構並定義實體間的關係,這對於資料儲存與檢索至關重要。類別圖則有助於設計軟體組件並定義其行為,這對於實現業務邏輯與使用者介面至關重要。

透過同時使用 ERD 與類別圖,我們可以建立更完整且結構良好的系統設計,兼顧資料與軟體組件。ERD 為資料庫結構與資料儲存提供基礎,而類別圖則為軟體組件及其互動提供基礎。這有助於建立具可擴展性、可維護性與效率的軟體系統,並使其隨時間推移更易於理解與修改。

實體關係圖與類別圖之比較

ERD 主要關注軟體系統的資料模型層,這在模型 – 視圖 – 控制器(MVC)架構中通常對應模型層。ERD 的目的是提供資料結構及其關係的視覺表示,可作為在資料庫或其他儲存系統中實現資料模型的基礎。

另一方面,類別圖在涵蓋系統架構方面更為全面,因為它們表示 MVC 架構中所有三層的類別與物件。除了表示資料模型層外,類別圖也能表示控制器層中的系統邏輯與行為,以及視圖層中的使用者介面與互動。透過表示系統架構的三個層面,類別圖有助於確保系統設計良好、整合完善,且各組件能有效協同運作。

總結而言,ERD 主要關注軟體系統的資料模型層,而類別圖則涵蓋 MVC 架構的三個層面。類別圖提供更全面的系統架構視圖,並有助於確保系統組件能有效協同運作。

問題描述——書店

我們希望開發一套系統來管理小型書店的庫存。該系統應能追蹤庫存中的書籍、其作者以及可用副本數量。顧客可以購買書籍,系統應據此更新庫存。

建立書店系統的實體關係圖

在此實體關係圖中,我們有四個實體:書籍, 庫存, 顧客,以及購買。其中,書籍實體代表庫存中的書籍及其作者。而庫存實體追蹤每本書的可用副本數量。該顧客實體代表書店的顧客,而該購買實體追蹤每位顧客所購買的書籍。

實體之間的關係以連接它們的線條表示。我們擁有書籍與庫存(即,一本書在庫存中可以有多个副本),以及購買與顧客(即,一位顧客可以進行多次購買),以及購買與書籍(即,一本書可以被多次購買)。

開發實體關係圖(ERD)

書店系統邏輯 ERD

根據邏輯實體關係圖開發類別圖

在此類別圖中,我們有四種類別:書籍, 庫存, 顧客,以及購買。每個類別的屬性以私有變數表示。我們擁有與實體關係圖相同的關係,但表示方式不同。我們擁有書籍 以及 庫存,其以一條帶有箭頭的線條表示,箭頭從 書籍 指向 庫存 以及數字 1 位於 書籍 類別旁,以及 0..* 位於 庫存 類別。我們之間存在一對多的關係,即 顧客 以及 採購 以及 書籍 與採購,這些關係以帶有箭頭的線條表示,箭頭從 採購 指向 顧客 以及 書籍,分別。

透過資料建模並導出類別圖,我們可以建立一個堅固且易於維護的軟體系統,以管理小型書店的庫存。

書店系統類別圖

透過細化邏輯 ERD 來開發實體 ERD

在此實體 ERD 中,我們使用類別圖語法來表示資料庫資料表。我們定義了一個Table巨集,該巨集接受名稱與描述作為參數,並據此格式化類別。我們也定義了PrimaryKey與ForeignKey巨集,分別用於格式化主鍵與外鍵屬性。

我們建立四個資料表:Book, Inventory, Customer,以及Purchase,每個資料表皆包含其屬性。我們使用[PK]與[FK]註解來分別標示主鍵與外鍵屬性。我們也使用--|>箭頭標示來表示資料表之間的關聯。

透過使用實體 ERD,我們可以視覺化資料庫結構及其關聯,這對於資料庫設計與最佳化相當有幫助。

書店系統實體 ERD

撰寫 SQL 以根據實體 ERD 建立資料庫

此結構包含四個資料表及其屬性與關聯,遵循 SQL 語言的語法。我們使用CREATE TABLE陳述式來定義每個資料表,並指定屬性及其資料類型與約束,例如PRIMARY KEY與外鍵. 我們也使用「REFERENCES關鍵字來表示資料表之間的關聯。

(*Visual Paradigm 螢幕截圖 – 從 ERD 產生資料庫)

ER 圖(ERD)工具

此結構可用於建立實體資料庫執行個體,其中資料可依據定義的結構進行儲存與檢索。

CREATE TABLE Book (
ISBN VARCHAR(255) PRIMARY KEY,
title VARCHAR(255),
author VARCHAR(255)
);

CREATE TABLE Inventory (
ISBN VARCHAR(255) PRIMARY KEY REFERENCES Book(ISBN),
numCopies INT
);

CREATE TABLE Customer (
id INT PRIMARY KEY,
name VARCHAR(255),
email VARCHAR(255)
);

CREATE TABLE Purchase (
id INT PRIMARY KEY,
customerId INT REFERENCES Customer(id),
ISBN VARCHAR(255) REFERENCES Book(ISBN),
date DATE
);

資料建模的另一種方法:物件關聯映射

ORM(物件關聯映射)是一種資料建模的替代方法,允許開發人員使用物件導向程式語言與關聯式資料庫互動,而無需撰寫複雜的 SQL 查詢。換句話說,ORM 提供了一種在資料庫的關聯式資料模型與程式語言的物件導向資料模型之間進行映射的方式。

ORM 框架(如 Hibernate、Django ORM 和 Sequelize)提供了一套工具和 API,讓開發人員能夠以物件而非資料表與資料列的方式操作資料庫,從而簡化資料庫操作流程。ORM 框架提供了一種定義代表資料庫實體的物件類別的方法,並將這些類別的屬性對應到相應的資料庫欄位。此外,它們還提供以物件導向語法查詢資料庫的方式,這能使程式碼更具可讀性且更易於維護。

物件關聯式映射(ORM)範例

使用 ORM 可以透過抽象化關聯式資料庫的許多複雜性,並在物件導向程式語言中提供更自然的方式來操作資料,從而簡化資料建模流程。ORM 也能讓在不同資料庫或資料庫系統之間切換變得更加容易,因為 ORM 框架會處理大部分底層與資料庫相關的細節。

然而,必須注意的是,ORM 並非在所有情況下都是最佳解決方案。使用 ORM 可能會伴隨效能與可擴展性的權衡取捨,且它未必適合某些類型的應用程式或資料模型。最終,選擇使用 ORM 或傳統資料建模技術,將取決於專案的具體需求,以及開發團隊的專業知識與偏好。

結論

資料建模是物件導向設計中的關鍵步驟,因為它能讓我們以結構化的方式呈現資料與實體之間的關係。透過使用實體關係圖(ERD)與類別圖等工具,我們可以視覺化資料結構及其關係,這有助於設計高效且易於維護的軟體系統。

在本文中,我們展示了如何建立實體 ERD,並據此衍生出類別圖。我們也根據實體 ERD 產生了資料庫結構,可用於建立實體資料庫執行個體。遵循這些步驟,我們可以建立結構良好的資料庫結構,以清晰簡潔的方式呈現資料實體及其關係。

總體而言,資料建模是軟體開發的重要面向,透過使用 ERD 與類別圖等工具,我們可以設計出更優異的系統,使其更易於理解、維護,並能隨著時間推移持續演進。