# 資料庫遷移指南 - 添加 is_timeout 欄位 ## 概述 本次遷移為現有的測試結果表添加 `is_timeout` 欄位,用於標記測試是否因為時間到而強制提交。 ## 受影響的表 1. `test_results` - 邏輯測試和創意測試結果表 2. `combined_test_results` - 綜合測試結果表 ## 遷移內容 為每個表添加以下欄位: ```sql is_timeout BOOLEAN DEFAULT FALSE ``` ## 執行方法 ### 方法一:直接執行 SQL 腳本(推薦) 1. 打開 MySQL 客戶端(如 phpMyAdmin、MySQL Workbench 或命令行) 2. 連接到 `hr_assessment` 資料庫 3. 執行以下 SQL 命令: ```sql USE hr_assessment; -- 添加 test_results 表的 is_timeout 欄位 ALTER TABLE test_results ADD COLUMN is_timeout BOOLEAN DEFAULT FALSE; -- 添加 combined_test_results 表的 is_timeout 欄位 ALTER TABLE combined_test_results ADD COLUMN is_timeout BOOLEAN DEFAULT FALSE; ``` ### 方法二:使用 Node.js 腳本 1. 確保已安裝 mysql2 依賴: ```bash npm install mysql2 ``` 2. 執行遷移腳本: ```bash node scripts/add-timeout-columns.js ``` ### 方法三:應用程式自動遷移 當應用程式重新啟動時,會自動執行遷移(如果欄位不存在)。 ## 驗證遷移 執行以下查詢來驗證欄位是否成功添加: ```sql -- 檢查 test_results 表結構 DESCRIBE test_results; -- 檢查 combined_test_results 表結構 DESCRIBE combined_test_results; -- 確認欄位存在 SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'hr_assessment' AND TABLE_NAME IN ('test_results', 'combined_test_results') AND COLUMN_NAME = 'is_timeout'; ``` ## 預期結果 - `test_results` 表應該包含 `is_timeout` 欄位 - `combined_test_results` 表應該包含 `is_timeout` 欄位 - 所有現有記錄的 `is_timeout` 值應該為 `FALSE` ## 回滾方法 如果需要移除這些欄位(不建議): ```sql USE hr_assessment; -- 移除 test_results 表的 is_timeout 欄位 ALTER TABLE test_results DROP COLUMN is_timeout; -- 移除 combined_test_results 表的 is_timeout 欄位 ALTER TABLE combined_test_results DROP COLUMN is_timeout; ``` ## 注意事項 1. 此遷移是向後兼容的,不會影響現有功能 2. 所有現有記錄的 `is_timeout` 值將設為 `FALSE` 3. 新的測試結果將根據實際情況設置 `is_timeout` 值 4. 建議在生產環境執行前先在測試環境驗證 ## 完成後的功能 - 綜合測試時間從 45 分鐘改為 30 分鐘 - 剩餘 5 分鐘時會彈出提醒 - 時間到後自動提交並標記為時間到 - 管理員可以在結果頁面看到時間到標記