Files
5why-analyzer/docs/db_schema.md
donald 78efac64e2 Initial commit: 5 Why Root Cause Analyzer v1.0.0
Phase 0 & Phase 2 completed:
- Project structure setup
- Environment configuration (.env, .gitignore)
- Enterprise-grade dependencies (bcrypt, helmet, mysql2, etc.)
- Complete database schema with 8 tables + 2 views
- Database initialization scripts
- Comprehensive documentation

Database Tables:
- users (user management with 3-tier permissions)
- analyses (analysis records)
- analysis_perspectives (multi-angle analysis)
- analysis_whys (detailed 5 Why records)
- llm_configs (LLM API configurations)
- system_settings (system parameters)
- audit_logs (security audit trail)
- sessions (session management)

Tech Stack:
- Backend: Node.js + Express
- Frontend: React 18 + Vite + Tailwind CSS
- Database: MySQL 9.4.0
- AI: Ollama API (qwen2.5:3b)

Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-05 18:29:29 +08:00

12 KiB
Raw Blame History

資料庫架構文件 (Database Schema)

專案: 5 Why Root Cause Analyzer 資料庫: db_A102 版本: 1.0.0 建立日期: 2025-12-05 最後更新: 2025-12-05


目錄


概述

本系統使用 MySQL 8.0+ 資料庫,採用 InnoDB 引擎支援交易處理和外鍵約束。資料庫設計遵循第三正規化3NF確保資料一致性和完整性。

連線資訊

  • 主機: mysql.theaken.com
  • Port: 33306
  • 資料庫: db_A102
  • 字元集: utf8mb4
  • 排序規則: utf8mb4_unicode_ci

資料表清單

# 資料表名稱 說明 記錄數(預估)
1 users 使用者資料表 100-1000
2 analyses 分析記錄表 10000+
3 analysis_perspectives 分析角度詳細表 30000+
4 analysis_whys 5 Why詳細記錄表 150000+
5 llm_configs LLM API配置表 10-50
6 system_settings 系統設定表 50-100
7 audit_logs 稽核日誌表 100000+
8 sessions Session表 100-1000

資料表詳細說明

1. users (使用者資料表)

儲存系統使用者的基本資料和認證資訊。

欄位說明:

欄位名稱 資料型態 限制 說明
id INT PK, AUTO_INCREMENT 使用者ID主鍵
employee_id VARCHAR(50) UNIQUE, NOT NULL 工號
username VARCHAR(100) NOT NULL 使用者名稱
email VARCHAR(255) UNIQUE, NOT NULL Email
password_hash VARCHAR(255) NOT NULL 密碼雜湊bcrypt
role ENUM DEFAULT 'user' 權限等級user/admin/super_admin
department VARCHAR(100) NULL 部門
position VARCHAR(100) NULL 職位
is_active BOOLEAN DEFAULT TRUE 帳號啟用狀態
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP 建立時間
updated_at TIMESTAMP AUTO UPDATE 更新時間
last_login_at TIMESTAMP NULL 最後登入時間

索引:

  • PRIMARY KEY: id
  • UNIQUE KEY: employee_id, email
  • INDEX: idx_employee_id, idx_email, idx_role

權限等級說明:

  • user: 一般使用者(可執行分析、查看自己的記錄)
  • admin: 管理者(可管理使用者、查看所有記錄)
  • super_admin: 最高權限管理者(完整系統控制權)

2. analyses (分析記錄表)

儲存每次 5 Why 分析的主要資料。

欄位說明:

欄位名稱 資料型態 限制 說明
id INT PK, AUTO_INCREMENT 分析記錄ID
user_id INT FK, NOT NULL 使用者ID外鍵
finding TEXT NOT NULL Finding描述
job_content TEXT NOT NULL 工作內容
output_language VARCHAR(10) DEFAULT 'zh-TW' 輸出語言
problem_restatement TEXT NULL 問題重述5W1H
analysis_result JSON NULL 完整分析結果JSON格式
status ENUM DEFAULT 'pending' 分析狀態
error_message TEXT NULL 錯誤訊息
processing_time INT NULL 處理時間(秒)
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP 建立時間
updated_at TIMESTAMP AUTO UPDATE 更新時間

索引:

  • PRIMARY KEY: id
  • FOREIGN KEY: user_id REFERENCES users(id)
  • INDEX: idx_user_id, idx_status, idx_created_at

狀態說明:

  • pending: 待處理
  • processing: 處理中
  • completed: 完成
  • failed: 失敗

3. analysis_perspectives (分析角度詳細表)

儲存每個分析的不同角度(流程面、系統面、管理面等)的詳細資料。

欄位說明:

欄位名稱 資料型態 限制 說明
id INT PK, AUTO_INCREMENT 分析角度ID
analysis_id INT FK, NOT NULL 分析記錄ID外鍵
perspective VARCHAR(100) NOT NULL 分析角度名稱
perspective_icon VARCHAR(10) NULL Emoji圖示
root_cause TEXT NULL 根本原因
permanent_solution TEXT NULL 永久性對策
logic_check_forward TEXT NULL 順向邏輯檢核
logic_check_backward TEXT NULL 逆向邏輯檢核
logic_valid BOOLEAN DEFAULT TRUE 邏輯是否有效
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP 建立時間

索引:

  • PRIMARY KEY: id
  • FOREIGN KEY: analysis_id REFERENCES analyses(id)
  • INDEX: idx_analysis_id

4. analysis_whys (5 Why詳細記錄表)

儲存每個分析角度的 5 Why 問答詳細記錄。

欄位說明:

欄位名稱 資料型態 限制 說明
id INT PK, AUTO_INCREMENT Why記錄ID
perspective_id INT FK, NOT NULL 分析角度ID外鍵
level INT NOT NULL Why層級1-5
question TEXT NOT NULL 問題
answer TEXT NOT NULL 答案
is_verified BOOLEAN DEFAULT FALSE 是否已驗證
verification_note TEXT NULL 驗證說明
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP 建立時間

索引:

  • PRIMARY KEY: id
  • FOREIGN KEY: perspective_id REFERENCES analysis_perspectives(id)
  • INDEX: idx_perspective_id, idx_level

5. llm_configs (LLM API配置表)

儲存不同 LLM 提供商的 API 配置資訊。

欄位說明:

欄位名稱 資料型態 限制 說明
id INT PK, AUTO_INCREMENT 配置ID
provider VARCHAR(50) NOT NULL LLM提供商
api_url VARCHAR(255) NULL API URL
api_key VARCHAR(255) NULL API Key加密
model_name VARCHAR(100) NULL 模型名稱
is_active BOOLEAN DEFAULT FALSE 是否啟用
max_tokens INT DEFAULT 6000 最大Token數
temperature DECIMAL(3,2) DEFAULT 0.7 溫度參數
timeout INT DEFAULT 120000 Timeout毫秒
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP 建立時間
updated_at TIMESTAMP AUTO UPDATE 更新時間
created_by INT FK, NULL 建立者ID

索引:

  • PRIMARY KEY: id
  • FOREIGN KEY: created_by REFERENCES users(id)
  • INDEX: idx_provider, idx_is_active
  • UNIQUE KEY: unique_active_provider (provider, is_active)

支援的 Provider:

  • ollama: Ollama API
  • gemini: Google Gemini
  • deepseek: DeepSeek API
  • openai: OpenAI API

6. system_settings (系統設定表)

儲存系統的各種設定參數。

欄位說明:

欄位名稱 資料型態 限制 說明
id INT PK, AUTO_INCREMENT 設定ID
setting_key VARCHAR(100) UNIQUE, NOT NULL 設定鍵
setting_value TEXT NULL 設定值
setting_type VARCHAR(50) DEFAULT 'string' 設定類型
description TEXT NULL 說明
is_public BOOLEAN DEFAULT FALSE 是否公開(前端可見)
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP 建立時間
updated_at TIMESTAMP AUTO UPDATE 更新時間
updated_by INT FK, NULL 更新者ID

索引:

  • PRIMARY KEY: id
  • UNIQUE KEY: setting_key
  • FOREIGN KEY: updated_by REFERENCES users(id)
  • INDEX: idx_setting_key, idx_is_public

設定類型:

  • string: 字串
  • number: 數字
  • boolean: 布林值
  • json: JSON 物件

7. audit_logs (稽核日誌表)

記錄所有重要操作的稽核日誌,用於安全追蹤和問題排查。

欄位說明:

欄位名稱 資料型態 限制 說明
id INT PK, AUTO_INCREMENT 日誌ID
user_id INT FK, NULL 使用者ID
action VARCHAR(100) NOT NULL 動作類型
entity_type VARCHAR(50) NULL 實體類型
entity_id INT NULL 實體ID
old_value JSON NULL 舊值
new_value JSON NULL 新值
ip_address VARCHAR(45) NULL IP位址
user_agent TEXT NULL User Agent
status ENUM DEFAULT 'success' 執行狀態
error_message TEXT NULL 錯誤訊息
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP 建立時間

索引:

  • PRIMARY KEY: id
  • FOREIGN KEY: user_id REFERENCES users(id)
  • INDEX: idx_user_id, idx_action, idx_created_at, idx_entity

常見動作類型:

  • login: 登入
  • logout: 登出
  • create_analysis: 建立分析
  • update_user: 更新使用者
  • delete_user: 刪除使用者
  • update_llm_config: 更新 LLM 配置
  • update_setting: 更新系統設定

8. sessions (Session表)

儲存使用者的 Session 資料(使用 express-session

欄位說明:

欄位名稱 資料型態 限制 說明
session_id VARCHAR(128) PK Session ID
expires BIGINT UNSIGNED NOT NULL 過期時間Unix timestamp
data TEXT NULL Session 資料

索引:

  • PRIMARY KEY: session_id
  • INDEX: idx_expires

關聯圖

users (1) ──< (N) analyses
                    │
                    └──< (N) analysis_perspectives
                                │
                                └──< (N) analysis_whys

users (1) ──< (N) llm_configs (created_by)
users (1) ──< (N) system_settings (updated_by)
users (1) ──< (N) audit_logs

關聯說明:

  • 一個使用者可以有多筆分析記錄
  • 一筆分析記錄有多個分析角度通常3個
  • 一個分析角度有多個 Why 記錄1-5個
  • 所有外鍵使用 ON DELETE CASCADEON DELETE SET NULL 確保資料完整性

索引策略

主要索引

  1. 主鍵索引: 所有資料表的 id 欄位
  2. 唯一索引: users.employee_id, users.email, system_settings.setting_key
  3. 外鍵索引: 所有外鍵欄位自動建立索引

查詢最佳化索引

  1. analyses.idx_user_id: 加速查詢使用者的分析記錄
  2. analyses.idx_status: 加速查詢特定狀態的分析
  3. analyses.idx_created_at: 加速時間範圍查詢
  4. audit_logs.idx_action: 加速查詢特定動作的日誌
  5. llm_configs.idx_is_active: 快速找到啟用的 LLM 配置

視圖說明

1. user_analysis_stats

使用者分析統計視圖,用於管理後台儀表板。

SELECT
    u.id AS user_id,
    u.username,
    u.employee_id,
    u.department,
    COUNT(a.id) AS total_analyses,
    COUNT(CASE WHEN a.status = 'completed' THEN 1 END) AS completed_analyses,
    COUNT(CASE WHEN a.status = 'failed' THEN 1 END) AS failed_analyses,
    AVG(a.processing_time) AS avg_processing_time,
    MAX(a.created_at) AS last_analysis_at
FROM users u
LEFT JOIN analyses a ON u.id = a.user_id
GROUP BY u.id;

2. recent_analyses

最近分析記錄視圖,顯示最近 100 筆分析。

SELECT
    a.id,
    a.finding,
    u.username,
    u.employee_id,
    a.output_language,
    a.status,
    a.processing_time,
    a.created_at
FROM analyses a
JOIN users u ON a.user_id = u.id
ORDER BY a.created_at DESC
LIMIT 100;

資料字典

語言代碼對照表

代碼 語言
zh-TW 繁體中文
zh-CN 简体中文
en English
ja 日本語
ko 한국어
vi Tiếng Việt
th ภาษาไทย

權限等級對照表

等級 說明 權限
user 一般使用者 執行分析、查看自己的記錄
admin 管理者 使用者管理、查看所有記錄
super_admin 最高權限管理者 完整系統控制權

維護建議

定期維護

  1. 清理過期 Sessions: 每日清理過期的 session 記錄
  2. 稽核日誌歸檔: 每月將舊日誌移至歸檔表
  3. 索引最佳化: 每週執行 OPTIMIZE TABLE
  4. 備份策略: 每日全備份,每小時增量備份

效能監控

  1. 監控慢查詢(> 1秒
  2. 監控資料表大小成長
  3. 監控索引使用率
  4. 監控連線數

文件版本: 1.0.0 最後更新: 2025-12-05 維護者: System Administrator