個人記帳管理系統

Data Dictionary (DD) & Data Flow Diagram (DFD) — 1134542 俞綱皓

一、資料流程圖 (DFD)

Level 0 — Context Diagram

DFD Level 0 Context Diagram

Level 1 — 系統內部流程

DFD Level 1

DFD 說明

編號處理程序說明輸入輸出
P1使用者認證處理註冊與登入,產生 JWT Token帳號密碼JWT Token、用戶資料寫入 D1
P2帳戶管理新增/修改/刪除帳戶(現金、銀行、信用卡)帳戶操作請求帳戶資料寫入 D2
P3分類管理新增/修改/刪除收支分類(支援巢狀)分類操作請求分類資料寫入 D3
P4交易記錄新增/修改/刪除交易,關聯帳戶與分類交易資料交易寫入 D4、標籤寫入 D6
P5預算管理設定各分類的月/週預算預算設定預算資料寫入 D5
P6報表生成彙整交易與帳戶資料,產生報表圖表讀取 D2、D4報表/圖表回傳使用者

二、資料字典 (DD)

D1: users(使用者)

欄位名稱資料型態約束說明
idINTPK, AUTO_INCREMENT使用者唯一識別碼
usernameVARCHAR(50)NOT NULL, UNIQUE使用者名稱
emailVARCHAR(100)NOT NULL, UNIQUE, INDEX電子郵件
password_hashVARCHAR(255)NOT NULL密碼雜湊值(bcrypt)
created_atTIMESTAMPDEFAULT CURRENT_TIMESTAMP建立時間

D2: accounts(帳戶)

欄位名稱資料型態約束說明
idINTPK, AUTO_INCREMENT帳戶唯一識別碼
user_idINTFK → users(id), ON DELETE CASCADE所屬使用者
nameVARCHAR(50)NOT NULL帳戶名稱
typeENUM('cash','bank','credit')NOT NULL, DEFAULT 'cash'帳戶類型
balanceDECIMAL(12,2)NOT NULL, DEFAULT 0.00目前餘額
currencyVARCHAR(3)NOT NULL, DEFAULT 'TWD'幣別
created_atTIMESTAMPDEFAULT CURRENT_TIMESTAMP建立時間

D3: categories(分類)

欄位名稱資料型態約束說明
idINTPK, AUTO_INCREMENT分類唯一識別碼
user_idINTFK → users(id), ON DELETE CASCADE所屬使用者
nameVARCHAR(50)NOT NULL分類名稱
typeENUM('income','expense')NOT NULL收入或支出
iconVARCHAR(50)DEFAULT NULL分類圖示
parent_idINTFK → categories(id), ON DELETE SET NULL父分類(巢狀結構)
created_atTIMESTAMPDEFAULT CURRENT_TIMESTAMP建立時間

D4: transactions(交易紀錄)

欄位名稱資料型態約束說明
idINTPK, AUTO_INCREMENT交易唯一識別碼
user_idINTFK → users(id), ON DELETE CASCADE所屬使用者
account_idINTFK → accounts(id), ON DELETE CASCADE關聯帳戶
category_idINTFK → categories(id), ON DELETE RESTRICT關聯分類
amountDECIMAL(12,2)NOT NULL金額
typeENUM('income','expense')NOT NULL收入或支出
noteVARCHAR(255)DEFAULT NULL備註說明
dateDATENOT NULL交易日期
created_atTIMESTAMPDEFAULT 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(預算)

欄位名稱資料型態約束說明
idINTPK, AUTO_INCREMENT預算唯一識別碼
user_idINTFK → users(id), ON DELETE CASCADE所屬使用者
category_idINTFK → categories(id), ON DELETE CASCADE預算對應分類
amountDECIMAL(12,2)NOT NULL預算金額
periodENUM('monthly','weekly')NOT NULL, DEFAULT 'monthly'預算週期
start_dateDATENOT NULL開始日期
end_dateDATEDEFAULT NULL結束日期
created_atTIMESTAMPDEFAULT CURRENT_TIMESTAMP建立時間

D6: tags(標籤)

欄位名稱資料型態約束說明
idINTPK, AUTO_INCREMENT標籤唯一識別碼
user_idINTFK → users(id), ON DELETE CASCADE所屬使用者
nameVARCHAR(30)NOT NULL, UNIQUE(user_id, name)標籤名稱
created_atTIMESTAMPDEFAULT CURRENT_TIMESTAMP建立時間

D7: transaction_tags(交易-標籤關聯)

欄位名稱資料型態約束說明
transaction_idINTPK, FK → transactions(id), ON DELETE CASCADE交易 ID
tag_idINTPK, FK → tags(id), ON DELETE CASCADE標籤 ID

複合主鍵 (transaction_id, tag_id),M:N 關聯表

三、資料流定義

資料流名稱來源目的組成
帳號密碼使用者P1 使用者認證username + password
JWT TokenP1 使用者認證使用者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