de_DEen_USes_ESfa_IRfr_FRjapl_PLzh_CNzh_TW

DFD完整指南:邏輯與物理對比及Graphviz範例

1. 數據流圖簡介

數據流圖(DFD)是資訊系統中數據流動方式的圖形化表示。它顯示:

  • 數據的來源與去向
  • 數據如何被處理
  • 數據存儲的位置
  • 與系統互動的使用者或實體

對比圖表,說明邏輯型與實體型資料流圖之間的差異。


2. 關鍵概念

核心元素

元素 符號 用途
外部實體 矩形 發送或接收數據的個人、組織或系統
處理 圓形/橢圓形 將輸入數據轉換為輸出數據
數據存儲 開放矩形 用於持久資料儲存的儲存庫
資料流 箭頭 顯示資料移動的方向

DFD層級

  1. 情境圖(第0層): 最高層級,顯示系統邊界與主要外部實體
  2. 第1層: 將主要流程分解為主要的子流程
  3. 第2層及以上: 進一步分解,顯示詳細流程

3. 邏輯型與實體型DFD

邏輯型DFD

邏輯型DFD圖表,顯示不受硬體或軟體限制的業務邏輯與活動。

一邏輯型DFD(亦稱「基本模型」)著重於:

  • 做什麼系統所做的事
  • 業務活動與資訊需求
  • 與實作技術無關

特徵:

  • 顯示業務運作和流程
  • 無特定技術細節
  • 更具抽象性且以使用者為導向
  • 有助於理解業務需求

實體資料流程圖

圖表顯示實體型DFD的元件:硬體、軟體、人員與技術限制。

A 實體資料流程圖 (亦稱為「實作模型」)著重於:

  • 如何系統將如何被實作
  • 技術細節與限制
  • 特定技術與系統

特徵:

  • 顯示實際的硬體、軟體與人員
  • 包含實作細節
  • 更具體且以開發者為導向
  • 有助於系統設計與部署

比較表

面向 邏輯資料流程圖 物理資料流程圖
重點 業務需求 實作
誰 業務分析師、使用者 系統設計師、開發人員
層級 高階、抽象 詳細、具體
組件 業務流程 技術流程
資料儲存 概念實體 實體檔案/資料庫
實體 業務角色 實際系統/裝置

4. DFD組件
資料流圖(DFD)符號 - EdrawMax

外部實體

  • 資料的來源與目的地
  • 系統邊界之外
  • 以名詞命名

處理程序

  • 將輸入資料轉換為輸出資料
  • 以動詞+名詞命名
  • 編號以利識別

資料儲存

  • 持久性資料儲存庫
  • 以名詞命名
  • D1、D2、D3… 的編號

資料流

  • 顯示資料的移動
  • 以描述性標籤命名
  • 方向表示資料流動方向

5. 使用 Graphviz 的實例範例

範例 1:飯店管理系統(邏輯 DFD)

酒店管理系統的邏輯型DFD,顯示客人、員工與資料庫之間的資料流。

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:邏輯資料流程圖 – 圖書館管理系統

圖書館管理系統的邏輯型DFD,顯示處理程序、資料儲存與資料流。

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:實體資料流程圖 – 圖書館管理系統

圖書館管理系統的實體型DFD,顯示網路目錄、借閱API與歸還處理器的資料流。

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:電子商務訂單處理(邏輯資料流程圖)

電子商務訂單處理的邏輯型DFD,顯示顧客、供應商、付款處理器與內部流程之間的資料流。

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. 最佳實務

針對邏輯資料流程圖

  1. 專注於業務流程而非技術
  2. 使用業務術語利害關係人能夠理解的
  3. 維持流程在一致的抽象層級
  4. 與業務使用者共同驗證以確保準確性
  5. 顯示所有主要資料流元件之間

針對實體資料流程圖

  1. 包含技術特定細節
  2. 考慮效能與可擴展性
  3. 記錄系統介面清楚地
  4. 包含錯誤處理以及復原流程
  5. 與實際系統架構一致

一般最佳實務

  1. 從情境圖開始
  2. 以層級方式編號流程
  3. 使用有意義的名稱適用於所有元件
  4. 避免資料流程交叉
  5. 定期與利害關係人驗證

7. 常見陷阱

DFD的七個常見陷阱

陷阱 1:邏輯與實體混雜

❌ 錯誤:在邏輯資料流程圖中加入資料庫技術名稱
✅ 正確:保持邏輯資料流程圖的技術無關性

陷阱 2:遺漏資料流

❌ 錯誤:僅顯示實體之間的單一方向
✅ 正確:在適當情況下包含雙向資料流

陷阱 3:過於複雜

❌ 錯誤:將 20 個以上的流程放在一個圖表中
✅ 正確:分解為多個專注的圖表

陷阱 4:錯誤標示資料流

❌ 錯誤: 以「資料」作為標籤
✅ 正確: 如「客戶訂單詳情」之類的描述性標籤

陷阱 5:錯誤的流程邊界

❌ 錯誤: 一個流程執行多個無關的功能
✅ 正確: 為不同的功能設立獨立的流程


結論

資料流程圖是系統分析與設計中不可或缺的工具。了解邏輯型與物理型資料流程圖之間的差異,有助於您在軟體開發生命週期的不同階段,與不同利害關係人進行有效溝通。

  • 邏輯型資料流程圖 連結業務需求與技術解決方案
  • 物理型資料流程圖 指導實作與部署決策

請使用所提供的範例作為您自身資料流程圖的範本,並根據您的特定系統需求進行調整,同時遵循上述的最佳實務。


額外資源

  1. 由 Visual Paradigm 提供的 AI Gane 與 Sarson DFD 生成器: 解釋 Visual Paradigm 的 AI 工具如何從文字描述生成 Gane-Sarson DFD。
  2. 使用 Visual Paradigm 創建資料流程圖的逐步指南: 提供使用 Visual Paradigm 在線工具創建 DFD 的教學,從註冊到分享的完整流程。
  3. 如何創建資料流程圖(DFD)?: 一份指南,涵蓋 DFD 是什麼、其目的以及主要類型(實體與邏輯)。
  4. 使用 Visual Paradigm Online 創建 SSADM DFD 圖表的入門指南: 一份介紹性指南,說明如何使用 Visual Paradigm Online 創建 SSADM 風格的資料流程圖。
  5. 資料流程圖(DFD)全面指南:解密資訊流動: DFD 的概覽,詳細說明其組成元素,以及為何 Visual Paradigm 是創建 DFD 的合適工具。
  6. 掌握使用 Visual Paradigm 的資料流程圖:逐步指南: 一份實用指南,透過範例與模板教授 DFD 的創建,並包含線上購物系統等案例研究。
  7. 理解邏輯 DFD 與實體 DFD:何時以及為何需要它們: 解釋邏輯與實體資料流程圖的差異、目的以及適用的使用情境。
  8. 使用 Visual Paradigm Online 創建資料流程圖(DFD)的入門指南: 一份對初學者友善的教學,逐步介紹如何使用 Visual Paradigm Online 創建 DFD。
  9. DFD 資料庫 – Visual Paradigm 指南: 一系列關於 DFD 主題的文章合集,包括 AI 生成器、驗證、平衡與層級等。
  10. 使用 Visual Paradigm Online 開始創建資料流程圖(DFD)的入門指南: 詳細說明創建 DFD 的逐步流程,包括其關鍵組件以及如何使用模板。
  11. 使用最佳的DFD工具繪製DFD: 討論資料流的圖形表示,詳細說明邏輯型與實體型DFD的差異,並探討每種類型的優勢。
  12. 使用Visual Paradigm Online的資料流圖(DFD)入門指南: 一份以印尼語撰寫的DFD入門指南,概述了元件與在Visual Paradigm Online中逐步建立流程的說明。


本指南為建立有效DFD奠定了基礎。請記住,優秀的圖表會透過反覆修正與利害關係人的反饋不斷演進。