個人記帳管理系統
Data Dictionary (DD) & Data Flow Diagram (DFD) — 1134542 俞綱皓
一、資料流程圖 (DFD)
Level 0 — Context Diagram
Level 1 — 系統內部流程
DFD 說明
| 編號 | 處理程序 | 說明 | 輸入 | 輸出 |
| P1 | 使用者認證 | 處理註冊與登入,產生 JWT Token | 帳號密碼 | JWT Token、用戶資料寫入 D1 |
| P2 | 帳戶管理 | 新增/修改/刪除帳戶(現金、銀行、信用卡) | 帳戶操作請求 | 帳戶資料寫入 D2 |
| P3 | 分類管理 | 新增/修改/刪除收支分類(支援巢狀) | 分類操作請求 | 分類資料寫入 D3 |
| P4 | 交易記錄 | 新增/修改/刪除交易,關聯帳戶與分類 | 交易資料 | 交易寫入 D4、標籤寫入 D6 |
| P5 | 預算管理 | 設定各分類的月/週預算 | 預算設定 | 預算資料寫入 D5 |
| P6 | 報表生成 | 彙整交易與帳戶資料,產生報表圖表 | 讀取 D2、D4 | 報表/圖表回傳使用者 |
二、資料字典 (DD)
D1: users(使用者)
| 欄位名稱 | 資料型態 | 約束 | 說明 |
| id | INT | PK, AUTO_INCREMENT | 使用者唯一識別碼 |
| username | VARCHAR(50) | NOT NULL, UNIQUE | 使用者名稱 |
| email | VARCHAR(100) | NOT NULL, UNIQUE, INDEX | 電子郵件 |
| password_hash | VARCHAR(255) | NOT NULL | 密碼雜湊值(bcrypt) |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 建立時間 |
D2: accounts(帳戶)
| 欄位名稱 | 資料型態 | 約束 | 說明 |
| id | INT | PK, AUTO_INCREMENT | 帳戶唯一識別碼 |
| user_id | INT | FK → users(id), ON DELETE CASCADE | 所屬使用者 |
| name | VARCHAR(50) | NOT NULL | 帳戶名稱 |
| type | ENUM('cash','bank','credit') | NOT NULL, DEFAULT 'cash' | 帳戶類型 |
| balance | DECIMAL(12,2) | NOT NULL, DEFAULT 0.00 | 目前餘額 |
| currency | VARCHAR(3) | NOT NULL, DEFAULT 'TWD' | 幣別 |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 建立時間 |
D3: categories(分類)
| 欄位名稱 | 資料型態 | 約束 | 說明 |
| id | INT | PK, AUTO_INCREMENT | 分類唯一識別碼 |
| user_id | INT | FK → users(id), ON DELETE CASCADE | 所屬使用者 |
| name | VARCHAR(50) | NOT NULL | 分類名稱 |
| type | ENUM('income','expense') | NOT NULL | 收入或支出 |
| icon | VARCHAR(50) | DEFAULT NULL | 分類圖示 |
| parent_id | INT | FK → categories(id), ON DELETE SET NULL | 父分類(巢狀結構) |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 建立時間 |
D4: transactions(交易紀錄)
| 欄位名稱 | 資料型態 | 約束 | 說明 |
| id | INT | PK, AUTO_INCREMENT | 交易唯一識別碼 |
| user_id | INT | FK → users(id), ON DELETE CASCADE | 所屬使用者 |
| account_id | INT | FK → accounts(id), ON DELETE CASCADE | 關聯帳戶 |
| category_id | INT | FK → categories(id), ON DELETE RESTRICT | 關聯分類 |
| amount | DECIMAL(12,2) | NOT NULL | 金額 |
| type | ENUM('income','expense') | NOT NULL | 收入或支出 |
| note | VARCHAR(255) | DEFAULT NULL | 備註說明 |
| date | DATE | NOT NULL | 交易日期 |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 建立時間 |
索引:idx_user_date (user_id, date)、idx_user_category (user_id, category_id)、idx_user_type_date (user_id, type, date)
D5: budgets(預算)
| 欄位名稱 | 資料型態 | 約束 | 說明 |
| id | INT | PK, AUTO_INCREMENT | 預算唯一識別碼 |
| user_id | INT | FK → users(id), ON DELETE CASCADE | 所屬使用者 |
| category_id | INT | FK → categories(id), ON DELETE CASCADE | 預算對應分類 |
| amount | DECIMAL(12,2) | NOT NULL | 預算金額 |
| period | ENUM('monthly','weekly') | NOT NULL, DEFAULT 'monthly' | 預算週期 |
| start_date | DATE | NOT NULL | 開始日期 |
| end_date | DATE | DEFAULT NULL | 結束日期 |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 建立時間 |
D6: tags(標籤)
| 欄位名稱 | 資料型態 | 約束 | 說明 |
| id | INT | PK, AUTO_INCREMENT | 標籤唯一識別碼 |
| user_id | INT | FK → users(id), ON DELETE CASCADE | 所屬使用者 |
| name | VARCHAR(30) | NOT NULL, UNIQUE(user_id, name) | 標籤名稱 |
| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 建立時間 |
D7: transaction_tags(交易-標籤關聯)
| 欄位名稱 | 資料型態 | 約束 | 說明 |
| transaction_id | INT | PK, FK → transactions(id), ON DELETE CASCADE | 交易 ID |
| tag_id | INT | PK, FK → tags(id), ON DELETE CASCADE | 標籤 ID |
複合主鍵 (transaction_id, tag_id),M:N 關聯表
三、資料流定義
| 資料流名稱 | 來源 | 目的 | 組成 |
| 帳號密碼 | 使用者 | P1 使用者認證 | username + password |
| JWT Token | P1 使用者認證 | 使用者 | token_string + expires_in |
| 帳戶操作 | 使用者 | P2 帳戶管理 | name + type + currency + [balance] |
| 分類操作 | 使用者 | P3 分類管理 | name + type + [icon] + [parent_id] |
| 交易資料 | 使用者 | P4 交易記錄 | account_id + category_id + amount + type + date + [note] + [tags] |
| 預算設定 | 使用者 | P5 預算管理 | category_id + amount + period + start_date + [end_date] |
| 報表請求 | 使用者 | P6 報表生成 | date_range + [category_filter] + [account_filter] |
| 報表結果 | P6 報表生成 | 使用者 | summary + chart_data + transaction_list |