Files
hr-assessment-system/DATABASE_MIGRATION_GUIDE.md

2.6 KiB

資料庫遷移指南 - 添加 is_timeout 欄位

概述

本次遷移為現有的測試結果表添加 is_timeout 欄位,用於標記測試是否因為時間到而強制提交。

受影響的表

  1. test_results - 邏輯測試和創意測試結果表
  2. combined_test_results - 綜合測試結果表

遷移內容

為每個表添加以下欄位:

is_timeout BOOLEAN DEFAULT FALSE

執行方法

方法一:直接執行 SQL 腳本(推薦)

  1. 打開 MySQL 客戶端(如 phpMyAdmin、MySQL Workbench 或命令行)
  2. 連接到 hr_assessment 資料庫
  3. 執行以下 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 依賴:

    npm install mysql2
    
  2. 執行遷移腳本:

    node scripts/add-timeout-columns.js
    

方法三:應用程式自動遷移

當應用程式重新啟動時,會自動執行遷移(如果欄位不存在)。

驗證遷移

執行以下查詢來驗證欄位是否成功添加:

-- 檢查 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

回滾方法

如果需要移除這些欄位(不建議):

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 分鐘時會彈出提醒
  • 時間到後自動提交並標記為時間到
  • 管理員可以在結果頁面看到時間到標記