1. 數據流圖簡介
數據流圖(DFD)是資訊系統中數據流動方式的圖形化表示。它顯示:
- 數據的來源與去向
- 數據如何被處理
- 數據存儲的位置
- 與系統互動的使用者或實體

2. 關鍵概念
核心元素
| 元素 | 符號 | 用途 |
|---|---|---|
| 外部實體 | 矩形 | 發送或接收數據的個人、組織或系統 |
| 處理 | 圓形/橢圓形 | 將輸入數據轉換為輸出數據 |
| 數據存儲 | 開放矩形 | 用於持久資料儲存的儲存庫 |
| 資料流 | 箭頭 | 顯示資料移動的方向 |
DFD層級
- 情境圖(第0層): 最高層級,顯示系統邊界與主要外部實體
- 第1層: 將主要流程分解為主要的子流程
- 第2層及以上: 進一步分解,顯示詳細流程
3. 邏輯型與實體型DFD
邏輯型DFD

一邏輯型DFD(亦稱「基本模型」)著重於:
- 做什麼系統所做的事
- 業務活動與資訊需求
- 與實作技術無關
特徵:
- 顯示業務運作和流程
- 無特定技術細節
- 更具抽象性且以使用者為導向
- 有助於理解業務需求
實體資料流程圖

A 實體資料流程圖 (亦稱為「實作模型」)著重於:
- 如何系統將如何被實作
- 技術細節與限制
- 特定技術與系統
特徵:
- 顯示實際的硬體、軟體與人員
- 包含實作細節
- 更具體且以開發者為導向
- 有助於系統設計與部署
比較表
| 面向 | 邏輯資料流程圖 | 物理資料流程圖 |
|---|---|---|
| 重點 | 業務需求 | 實作 |
| 誰 | 業務分析師、使用者 | 系統設計師、開發人員 |
| 層級 | 高階、抽象 | 詳細、具體 |
| 組件 | 業務流程 | 技術流程 |
| 資料儲存 | 概念實體 | 實體檔案/資料庫 |
| 實體 | 業務角色 | 實際系統/裝置 |
4. DFD組件

外部實體
- 資料的來源與目的地
- 系統邊界之外
- 以名詞命名
處理程序
- 將輸入資料轉換為輸出資料
- 以動詞+名詞命名
- 編號以利識別
資料儲存
- 持久性資料儲存庫
- 以名詞命名
- D1、D2、D3… 的編號
資料流
- 顯示資料的移動
- 以描述性標籤命名
- 方向表示資料流動方向
5. 使用 Graphviz 的實例範例
範例 1:飯店管理系統(邏輯 DFD)

Graphviz
Edit Graphviz in VPasCode
digraph HotelMIS_DFD_邏輯 {
// --- 圖形樣式 ---
graph [
rankdir = LR
splines = true
overlap = false
nodesep = 0.6
ranksep = 1.0
fontname = "Helvetica,Arial,sans-serif"
fontsize = 12
]
// --- 節點樣式 ---
node [
fontname = "Helvetica,Arial,sans-serif"
fontsize = 11
penwidth = 1.5
]
// 外部實體
node [shape = box, style = "filled", fillcolor = "#E1F5FE", color = "#0288D1"]
客人;
員工;
// --- 系統邊界 ---
subgraph cluster_SystemBoundary {
label = "飯店MIS系統邊界";
fontname = "Helvetica,Arial,sans-serif";
fontcolor = "#757575";
fontsize = 14;
color = "#757575";
style = "dashed,rounded";
bgcolor = "#FAFAFA";
margin = 20;
// 處理程序
node [shape = circle, style = "filled", fillcolor = "#E8F5E9", color = "#388E3C", fixedsize = true, width = 1.3]
P1 [label="1.0n管理n預訂"];
P2 [label="2.0n入住/n退房"];
P3 [label="3.0n管理n庫存"];
// 資料儲存
node [shape = record, style = "filled", fillcolor = "#FFF9C4", color = "#FBC02D", fixedsize = false]
ReservationsDS [label="{ <id> D1 | 預訂n資料庫 }"];
RoomsDS [label="{ <id> D2 | 房間狀態n資料庫 }"];
InventoryDS [label="{ <id> D3 | 庫存n資料庫 }"];
}
// --- 邊界樣式 ---
edge [
fontname = "Helvetica,Arial,sans-serif"
fontsize = 9
color = "#555555"
arrowsize = 0.8
]
// --- 資料流 ---
// 客人互動
客人 -> P1 [label="預訂請求"];
P1 -> 客人 [label="確認"];
客人 -> P2 [label="到達"];
P2 -> 客人 [label="房間鑰匙/收據"];
// 員工互動
員工 -> P3 [label="更新庫存"];
P3 -> 員工 [label="警示/報表"];
// 程序至資料儲存
P1 -> ReservationsDS [label="新預訂"];
ReservationsDS -> P1 [label="檢查可用性"];
P1 -> RoomsDS [label="房間細節請求"];
RoomsDS -> P1 [label="可入住房間"];
P2 -> RoomsDS [label="房間狀態更新"];
RoomsDS -> P2 [label="房間資訊"];
P2 -> P3 [label="住宿細節"];
P3 -> InventoryDS [label="庫存更新"];
InventoryDS -> P3 [label="庫存水準"];
}
範例 2:邏輯資料流程圖 – 圖書館管理系統

Graphviz
Edit Graphviz in VPasCode
digraph LibrarySystem_邏輯 {
// --- 圖形樣式 ---
graph [
rankdir = TB
splines = true
nodesep = 0.5
ranksep = 0.8
fontname = "Helvetica,Arial,sans-serif"
fontsize = 12
]
// --- 節點樣式 ---
node [
fontname = "Helvetica,Arial,sans-serif"
fontsize = 11
penwidth = 1.5
]
// 外部實體
node [shape = box, style = "filled", fillcolor = "#E1F5FE", color = "#0288D1"]
成員;
圖書館員;
// --- 系統邊界 ---
subgraph cluster_LibrarySystem {
label = "圖書館系統(邏輯)";
style = "dashed,rounded";
color = "#757575";
bgcolor = "#FAFAFA";
margin = 20;
// 處理程序
node [shape = circle, style = "filled", fillcolor = "#E8F5E9", color = "#388E3C", width = 1.4]
P1 [label="1.0n管理n目錄"];
P2 [label="2.0n處理n借閱"];
P3 [label="3.0n處理n歸還"];
// 資料儲存
node [shape = record, style = "filled", fillcolor = "#FFF9C4", color = "#FBC02D"]
CatalogDS [label="{ <id> D1 | 書籍n目錄 }"];
TransactionsDS [label="{ <id> D2 | 借閱n紀錄 }"];
MemberDS [label="{ <id> D3 | 成員n資料庫 }"];
}
// --- 邊界樣式 ---
edge [
fontname = "Helvetica,Arial,sans-serif"
fontsize = 9
color = "#555555"
arrowsize = 0.8
]
// --- 資料流 ---
// 成員互動
成員 -> P1 [label="搜尋書籍"];
P1 -> 成員 [label="搜尋結果"];
成員 -> P2 [label="借閱請求"];
P2 -> 成員 [label="借閱確認"];
成員 -> P3 [label="歸還書籍"];
P3 -> 成員 [label="歸還收據"];
// 圖書館員互動
圖書館員 -> P1 [label="新增/更新書籍"];
P1 -> 圖書館員 [label="目錄更新確認"];
圖書館員 -> P3 [label="處理逾期"];
P3 -> 圖書館員 [label="逾期報表"];
// 資料流
P1 -> CatalogDS [label="書籍更新"];
CatalogDS -> P1 [label="目錄資料"];
P2 -> CatalogDS [label="檢查可用性"];
CatalogDS -> P2 [label="書籍狀態"];
P2 -> MemberDS [label="檢查成員狀態"];
MemberDS -> P2 [label="成員資訊"];
P2 -> TransactionsDS [label="建立借閱紀錄"];
TransactionsDS -> P2 [label="借閱歷史"];
P3 -> TransactionsDS [label="更新歸還"];
TransactionsDS -> P3 [label="借閱紀錄"];
P3 -> MemberDS [label="更新成員狀態"];
MemberDS -> P3 [label="成員資訊"];
}
範例 3:實體資料流程圖 – 圖書館管理系統

Graphviz
Edit Graphviz in VPasCode
digraph LibrarySystem_實體 {
// --- 圖形樣式 ---
graph [
rankdir = TB
splines = true
nodesep = 0.5
ranksep = 0.8
fontname = "Helvetica,Arial,sans-serif"
fontsize = 12
]
// --- 節點樣式 ---
node [
fontname = "Helvetica,Arial,sans-serif"
fontsize = 11
penwidth = 1.5
]
// 外部實體(實體)
node [shape = box, style = "filled", fillcolor = "#E1F5FE", color = "#0288D1"]
"圖書館成員" [label="圖書館n成員"];
"圖書館員" [label="圖書館n員工"];
"電子郵件系統" [label="電子郵件n系統"];
"付款網關" [label="付款n網關"];
// --- 系統邊界 ---
subgraph cluster_LibrarySystem_Physical {
label = "圖書館管理系統(實體實作)";
style = "dashed,rounded";
color = "#757575";
bgcolor = "#FAFAFA";
margin = 20;
// 實體處理程序(含技術細節)
node [shape = circle, style = "filled", fillcolor = "#E8F5E9", color = "#388E3C", width = 1.4]
P1 [label="1.0n網路目錄n(HTML, JS)"];
P2 [label="2.0n借閱nAPIn(Python/REST)"];
P3 [label="3.0n歸還n處理器n(Java)"];
// 實體資料儲存(含技術細節)
node [shape = record, style = "filled", fillcolor = "#FFF9C4", color = "#FBC02D"]
CatalogDS [label="{ <id> D1 | PostgreSQLn書籍目錄 }"];
TransactionsDS [label="{ <id> D2 | MongoDBn借閱紀錄 }"];
MemberDS [label="{ <id> D3 | Oraclen成員資料庫 }"];
// 額外的實體元件
node [shape = box, style = "filled", fillcolor = "#F3E5F5", color = "#8E24AA"]
"快取伺服器" [label="Redisn快取"];
"訊息佇列" [label="RabbitMQn佇列"];
}
// --- 邊界樣式 ---
edge [
fontname = "Helvetica,Arial,sans-serif"
fontsize = 9
color = "#555555"
arrowsize = 0.8
]
// --- 資料流(實體)---
// 實體成員互動
"圖書館成員" -> P1 [label="HTTP GETn書籍搜尋"];
P1 -> "圖書館成員" [label="HTML/JSONn結果"];
"圖書館成員" -> P2 [label="REST APIn借閱請求"];
P2 -> "圖書館成員" [label="JSONn確認"];
"圖書館成員" -> P3 [label="REST APIn歸還"];
P3 -> "圖書館成員" [label="JSONn收據"];
// 實體圖書館員互動
"圖書館員" -> P1 [label="HTTPSn目錄管理"];
P1 -> "圖書館員" [label="HTMLn確認"];
"圖書館員" -> P3 [label="REST APIn逾期處理"];
P3 -> "圖書館員" [label="PDF報表"];
// 外部系統互動
P2 -> "電子郵件系統" [label="SMTPn通知"];
P3 -> "付款網關" [label="HTTPSn罰款支付"];
// 資料流(實體)
P1 -> CatalogDS [label="SQL UPDATE"];
CatalogDS -> P1 [label="SQL SELECT"];
P1 -> "快取伺服器" [label="快取更新"];
"快取伺服器" -> P1 [label="快取命中"];
P2 -> CatalogDS [label="SQL SELECT"];
CatalogDS -> P2 [label="SQL結果"];
P2 -> MemberDS [label="SQL SELECT"];
MemberDS -> P2 [label="SQL結果"];
P2 -> TransactionsDS [label="INSERT"];
TransactionsDS -> P2 [label="SELECT"];
P2 -> "訊息佇列" [label="發佈n借閱事件"];
P3 -> TransactionsDS [label="UPDATE"];
TransactionsDS -> P3 [label="SELECT"];
P3 -> MemberDS [label="UPDATE"];
MemberDS -> P3 [label="SELECT"];
P3 -> "訊息佇列" [label="發佈n歸還事件"];
}
範例 4:電子商務訂單處理(邏輯資料流程圖)

Graphviz
Edit Graphviz in VPasCode
digraph ECommerce_Logical {
// --- 圖形樣式 ---
graph [
rankdir = LR
splines = true
nodesep = 0.5
ranksep = 0.8
fontname = "Helvetica,Arial,sans-serif"
fontsize = 12
]
// --- 節點樣式 ---
node [
fontname = "Helvetica,Arial,sans-serif"
fontsize = 11
penwidth = 1.5
]
// 外部實體
node [shape = box, style = "filled", fillcolor = "#E1F5FE", color = "#0288D1"]
Customer;
Supplier;
"Payment Processor" [label="付款n處理器"];
// --- 系統邊界 ---
subgraph cluster_ECommerce {
label = "電子商務系統(邏輯)";
style = "dashed,rounded";
color = "#757575";
bgcolor = "#FAFAFA";
margin = 20;
// 處理程序
node [shape = circle, style = "filled", fillcolor = "#E8F5E9", color = "#388E3C", width = 1.4]
P1 [label="1.0n處理n訂單"];
P2 [label="2.0n管理n庫存"];
P3 [label="3.0n處理n出貨"];
// 資料儲存
node [shape = record, style = "filled", fillcolor = "#FFF9C4", color = "#FBC02D"]
OrderDS [label="{ <id> D1 | 訂單 }"];
InventoryDS [label="{ <id> D2 | 庫存 }"];
ShipmentDS [label="{ <id> D3 | 出貨 }"];
}
// --- 箭頭樣式 ---
edge [
fontname = "Helvetica,Arial,sans-serif"
fontsize = 9
color = "#555555"
arrowsize = 0.8
]
// --- 資料流 ---
// 客戶互動
Customer -> P1 [label="訂單詳情"];
P1 -> Customer [label="訂單確認"];
Customer -> P3 [label="追蹤訂單"];
P3 -> Customer [label="追蹤資訊"];
// 付款處理器
"Payment Processor" -> P1 [label="付款回應"];
P1 -> "Payment Processor" [label="付款請求"];
// 供應商
Supplier -> P2 [label="庫存更新"];
P2 -> Supplier [label="補貨請求"];
// 處理程序資料流
P1 -> OrderDS [label="儲存訂單"];
OrderDS -> P1 [label="訂單歷史"];
P1 -> InventoryDS [label="檢查庫存"];
InventoryDS -> P1 [label="可取得性"];
P1 -> P3 [label="出貨詳情"];
P2 -> InventoryDS [label="更新庫存"];
InventoryDS -> P2 [label="現有庫存"];
P3 -> OrderDS [label="更新狀態"];
OrderDS -> P3 [label="訂單資訊"];
P3 -> ShipmentDS [label="建立出貨"];
ShipmentDS -> P3 [label="出貨詳情"];
}
6. 最佳實務
針對邏輯資料流程圖
- 專注於業務流程而非技術
- 使用業務術語利害關係人能夠理解的
- 維持流程在一致的抽象層級
- 與業務使用者共同驗證以確保準確性
- 顯示所有主要資料流元件之間
針對實體資料流程圖
- 包含技術特定細節
- 考慮效能與可擴展性
- 記錄系統介面清楚地
- 包含錯誤處理以及復原流程
- 與實際系統架構一致
一般最佳實務
- 從情境圖開始
- 以層級方式編號流程
- 使用有意義的名稱適用於所有元件
- 避免資料流程交叉
- 定期與利害關係人驗證
7. 常見陷阱

陷阱 1:邏輯與實體混雜
❌ 錯誤:在邏輯資料流程圖中加入資料庫技術名稱
✅ 正確:保持邏輯資料流程圖的技術無關性
陷阱 2:遺漏資料流
❌ 錯誤:僅顯示實體之間的單一方向
✅ 正確:在適當情況下包含雙向資料流
陷阱 3:過於複雜
❌ 錯誤:將 20 個以上的流程放在一個圖表中
✅ 正確:分解為多個專注的圖表
陷阱 4:錯誤標示資料流
❌ 錯誤: 以「資料」作為標籤
✅ 正確: 如「客戶訂單詳情」之類的描述性標籤
陷阱 5:錯誤的流程邊界
❌ 錯誤: 一個流程執行多個無關的功能
✅ 正確: 為不同的功能設立獨立的流程
結論
資料流程圖是系統分析與設計中不可或缺的工具。了解邏輯型與物理型資料流程圖之間的差異,有助於您在軟體開發生命週期的不同階段,與不同利害關係人進行有效溝通。
- 邏輯型資料流程圖 連結業務需求與技術解決方案
- 物理型資料流程圖 指導實作與部署決策
請使用所提供的範例作為您自身資料流程圖的範本,並根據您的特定系統需求進行調整,同時遵循上述的最佳實務。
額外資源
- 由 Visual Paradigm 提供的 AI Gane 與 Sarson DFD 生成器: 解釋 Visual Paradigm 的 AI 工具如何從文字描述生成 Gane-Sarson DFD。
- 使用 Visual Paradigm 創建資料流程圖的逐步指南: 提供使用 Visual Paradigm 在線工具創建 DFD 的教學,從註冊到分享的完整流程。
- 如何創建資料流程圖(DFD)?: 一份指南,涵蓋 DFD 是什麼、其目的以及主要類型(實體與邏輯)。
- 使用 Visual Paradigm Online 創建 SSADM DFD 圖表的入門指南: 一份介紹性指南,說明如何使用 Visual Paradigm Online 創建 SSADM 風格的資料流程圖。
- 資料流程圖(DFD)全面指南:解密資訊流動: DFD 的概覽,詳細說明其組成元素,以及為何 Visual Paradigm 是創建 DFD 的合適工具。
- 掌握使用 Visual Paradigm 的資料流程圖:逐步指南: 一份實用指南,透過範例與模板教授 DFD 的創建,並包含線上購物系統等案例研究。
- 理解邏輯 DFD 與實體 DFD:何時以及為何需要它們: 解釋邏輯與實體資料流程圖的差異、目的以及適用的使用情境。
- 使用 Visual Paradigm Online 創建資料流程圖(DFD)的入門指南: 一份對初學者友善的教學,逐步介紹如何使用 Visual Paradigm Online 創建 DFD。
- DFD 資料庫 – Visual Paradigm 指南: 一系列關於 DFD 主題的文章合集,包括 AI 生成器、驗證、平衡與層級等。
- 使用 Visual Paradigm Online 開始創建資料流程圖(DFD)的入門指南: 詳細說明創建 DFD 的逐步流程,包括其關鍵組件以及如何使用模板。
- 使用最佳的DFD工具繪製DFD: 討論資料流的圖形表示,詳細說明邏輯型與實體型DFD的差異,並探討每種類型的優勢。
-
使用Visual Paradigm Online的資料流圖(DFD)入門指南: 一份以印尼語撰寫的DFD入門指南,概述了元件與在Visual Paradigm Online中逐步建立流程的說明。
本指南為建立有效DFD奠定了基礎。請記住,優秀的圖表會透過反覆修正與利害關係人的反饋不斷演進。








