Files
Document_translator_1panel/migrations/create_fresh_schema.sql
beabigegg 6599716481 1panel
2025-10-03 08:19:40 +08:00

160 lines
8.0 KiB
SQL
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- 全新的文件翻譯系統資料庫架構
-- 方案 A: dt_users 用於業務功能sys_user 用於登入記錄
-- API name 格式: 姓名+emailemail 作為主要識別鍵
-- Created: 2025-10-01
-- 1. 建立 dt_users 表 (業務功能使用)
CREATE TABLE dt_users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(255) NOT NULL COMMENT 'API name (姓名+email格式)',
display_name VARCHAR(255) NOT NULL COMMENT 'API name (姓名+email格式)',
email VARCHAR(255) NOT NULL UNIQUE COMMENT '電子郵件 (主要識別鍵)',
department VARCHAR(100) COMMENT '部門/職位',
is_admin BOOLEAN DEFAULT FALSE COMMENT '是否為管理員',
last_login DATETIME COMMENT '最後登入時間',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '建立時間',
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間',
INDEX idx_email (email),
INDEX idx_username_email (username, email)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='使用者資訊表';
-- 2. 建立 dt_translation_jobs 表 (翻譯工作)
CREATE TABLE dt_translation_jobs (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL COMMENT '關聯到 dt_users.id',
job_name VARCHAR(255) NOT NULL COMMENT '工作名稱',
source_lang VARCHAR(10) NOT NULL COMMENT '來源語言',
target_lang VARCHAR(10) NOT NULL COMMENT '目標語言',
file_type ENUM('DOCX', 'PPTX', 'PDF', 'TXT') NOT NULL COMMENT '檔案類型',
status ENUM('PENDING', 'PROCESSING', 'COMPLETED', 'FAILED') DEFAULT 'PENDING' COMMENT '工作狀態',
progress INT DEFAULT 0 COMMENT '進度百分比',
total_pages INT DEFAULT 0 COMMENT '總頁數',
processed_pages INT DEFAULT 0 COMMENT '已處理頁數',
cost DECIMAL(10,4) DEFAULT 0 COMMENT '翻譯成本',
error_message TEXT COMMENT '錯誤訊息',
conversation_id VARCHAR(255) COMMENT 'Dify 對話 ID',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '建立時間',
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間',
completed_at DATETIME COMMENT '完成時間',
FOREIGN KEY (user_id) REFERENCES dt_users(id) ON DELETE CASCADE,
INDEX idx_user_id (user_id),
INDEX idx_status (status),
INDEX idx_created_at (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='翻譯工作表';
-- 3. 建立 dt_job_files 表 (工作檔案)
CREATE TABLE dt_job_files (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
job_id BIGINT NOT NULL COMMENT '關聯到 dt_translation_jobs.id',
file_type ENUM('source', 'translated') NOT NULL COMMENT '檔案類型',
original_filename VARCHAR(255) NOT NULL COMMENT '原始檔名',
stored_filename VARCHAR(255) NOT NULL COMMENT '儲存檔名',
file_path VARCHAR(500) NOT NULL COMMENT '檔案路徑',
file_size BIGINT DEFAULT 0 COMMENT '檔案大小',
mime_type VARCHAR(100) COMMENT 'MIME 類型',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '建立時間',
FOREIGN KEY (job_id) REFERENCES dt_translation_jobs(id) ON DELETE CASCADE,
INDEX idx_job_id (job_id),
INDEX idx_file_type (file_type)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='工作檔案表';
-- 4. 建立 dt_translation_cache 表 (翻譯快取)
CREATE TABLE dt_translation_cache (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
content_hash VARCHAR(64) NOT NULL COMMENT '內容雜湊',
source_lang VARCHAR(10) NOT NULL COMMENT '來源語言',
target_lang VARCHAR(10) NOT NULL COMMENT '目標語言',
source_text TEXT NOT NULL COMMENT '來源文字',
translated_text TEXT NOT NULL COMMENT '翻譯文字',
quality_score DECIMAL(3,2) DEFAULT 0.00 COMMENT '品質分數',
hit_count INT DEFAULT 0 COMMENT '命中次數',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '建立時間',
last_used_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最後使用時間',
UNIQUE KEY uk_content_lang (content_hash, source_lang, target_lang),
INDEX idx_last_used (last_used_at),
INDEX idx_hit_count (hit_count)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='翻譯快取表';
-- 5. 建立 dt_api_usage_stats 表 (API 使用統計)
CREATE TABLE dt_api_usage_stats (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL COMMENT '關聯到 dt_users.id',
job_id BIGINT COMMENT '關聯到 dt_translation_jobs.id',
api_name VARCHAR(50) NOT NULL COMMENT 'API 名稱',
request_count INT DEFAULT 1 COMMENT '請求次數',
token_used INT DEFAULT 0 COMMENT '使用的 token 數',
cost DECIMAL(10,4) DEFAULT 0 COMMENT '成本',
response_time_ms INT DEFAULT 0 COMMENT '回應時間(毫秒)',
status ENUM('SUCCESS', 'FAILED', 'TIMEOUT') DEFAULT 'SUCCESS' COMMENT '狀態',
error_message TEXT COMMENT '錯誤訊息',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '建立時間',
date_key DATE GENERATED ALWAYS AS (DATE(created_at)) STORED COMMENT '日期鍵',
FOREIGN KEY (user_id) REFERENCES dt_users(id) ON DELETE CASCADE,
FOREIGN KEY (job_id) REFERENCES dt_translation_jobs(id) ON DELETE SET NULL,
INDEX idx_user_date (user_id, date_key),
INDEX idx_api_name (api_name),
INDEX idx_created_at (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='API 使用統計表';
-- 6. 建立 dt_system_logs 表 (系統日誌)
CREATE TABLE dt_system_logs (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
level ENUM('DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL') NOT NULL COMMENT '日誌級別',
category VARCHAR(50) NOT NULL COMMENT '日誌分類',
message TEXT NOT NULL COMMENT '日誌訊息',
user_id INT COMMENT '關聯到 dt_users.id',
job_id BIGINT COMMENT '關聯到 dt_translation_jobs.id',
extra_data JSON COMMENT '額外資料',
ip_address VARCHAR(45) COMMENT 'IP 地址',
user_agent TEXT COMMENT '用戶代理',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '建立時間',
date_key DATE GENERATED ALWAYS AS (DATE(created_at)) STORED COMMENT '日期鍵',
FOREIGN KEY (user_id) REFERENCES dt_users(id) ON DELETE SET NULL,
FOREIGN KEY (job_id) REFERENCES dt_translation_jobs(id) ON DELETE SET NULL,
INDEX idx_level_category (level, category),
INDEX idx_user_date (user_id, date_key),
INDEX idx_created_at (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系統日誌表';
-- 7. 建立 dt_notifications 表 (通知)
CREATE TABLE dt_notifications (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL COMMENT '關聯到 dt_users.id',
type ENUM('INFO', 'SUCCESS', 'WARNING', 'ERROR') NOT NULL COMMENT '通知類型',
title VARCHAR(255) NOT NULL COMMENT '通知標題',
message TEXT NOT NULL COMMENT '通知內容',
is_read BOOLEAN DEFAULT FALSE COMMENT '是否已讀',
data JSON COMMENT '額外資料',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '建立時間',
read_at DATETIME COMMENT '已讀時間',
FOREIGN KEY (user_id) REFERENCES dt_users(id) ON DELETE CASCADE,
INDEX idx_user_unread (user_id, is_read),
INDEX idx_created_at (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='通知表';
-- 8. 保持現有的 sys_user 表 (專門用於登入記錄)
-- sys_user 表已存在,透過 email 與 dt_users 關聯
-- 9. 重新命名 login_logs 為 dt_login_logs
RENAME TABLE login_logs TO dt_login_logs;
-- 10. 為 dt_login_logs 添加與 dt_users 的關聯
ALTER TABLE dt_login_logs
ADD COLUMN user_id INT COMMENT '關聯到 dt_users.id',
ADD INDEX idx_user_id (user_id),
ADD FOREIGN KEY fk_dt_login_logs_user_id (user_id) REFERENCES dt_users(id) ON DELETE SET NULL;
-- 11. 插入預設管理員使用者
INSERT INTO dt_users (username, display_name, email, department, is_admin)
VALUES ('ymirliu ymirliu@panjit.com.tw', 'ymirliu ymirliu@panjit.com.tw', 'ymirliu@panjit.com.tw', 'IT', TRUE);
-- 12. 驗證架構建立
SELECT 'Tables created:' as status;
SHOW TABLES LIKE 'dt_%';