Files
hr-assessment-system/DATABASE_MIGRATION_GUIDE.md

96 lines
2.6 KiB
Markdown

# 資料庫遷移指南 - 添加 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 分鐘時會彈出提醒
- 時間到後自動提交並標記為時間到
- 管理員可以在結果頁面看到時間到標記