# AI 展示平台資料庫設計 ## 📊 資料庫概述 本專案使用 **MySQL** 作為主要資料庫,設計了完整的資料表結構來支持 AI 展示平台的所有功能。 ### 🔗 資料庫連接資訊 - **主機**: `mysql.theaken.com` - **端口**: `33306` - **資料庫名**: `db_AI_Platform` - **用戶名**: `AI_Platform` - **密碼**: `Aa123456` ## 🏗️ 資料表結構 ### 核心業務表 #### 1. 用戶管理 - **users** - 用戶基本資訊 - **user_favorites** - 用戶收藏應用 - **user_likes** - 用戶按讚記錄 - **user_views** - 用戶瀏覽記錄 - **user_ratings** - 用戶評分記錄 #### 2. 競賽系統 - **competitions** - 競賽基本資訊 - **competition_rules** - 競賽規則 - **competition_award_types** - 競賽獎項類型 - **competition_judges** - 競賽評審關聯 - **competition_apps** - 競賽參與應用 - **competition_teams** - 競賽參與團隊 - **competition_proposals** - 競賽參與提案 #### 3. 評審系統 - **judges** - 評審基本資訊 - **app_judge_scores** - 應用評分記錄 - **proposal_judge_scores** - 提案評分記錄 #### 4. 團隊管理 - **teams** - 團隊基本資訊 - **team_members** - 團隊成員關聯 #### 5. 應用管理 - **apps** - AI 應用基本資訊 #### 6. 提案管理 - **proposals** - 提案基本資訊 #### 7. 獎項系統 - **awards** - 獎項記錄 #### 8. AI 助手 - **chat_sessions** - 聊天會話 - **chat_messages** - 聊天訊息 - **ai_assistant_configs** - AI 助手配置 #### 9. 系統管理 - **system_settings** - 系統設定 - **activity_logs** - 活動日誌 ## 📈 統計視圖 ### 1. user_statistics 用戶統計視圖,包含: - 基本資訊 - 收藏數量 - 按讚數量 - 瀏覽數量 - 平均評分 - 團隊參與情況 ### 2. app_statistics 應用統計視圖,包含: - 基本資訊 - 創作者資訊 - 團隊資訊 - 用戶互動統計 - 評審評分統計 ### 3. competition_statistics 競賽統計視圖,包含: - 基本資訊 - 評審數量 - 參與應用數量 - 參與團隊數量 - 參與提案數量 - 獎項數量 ## ⚙️ 觸發器 ### 1. 自動計算總分 - **calculate_app_total_score** - 應用評分總分計算 - **calculate_proposal_total_score** - 提案評分總分計算 ## 🚀 快速開始 ### 1. 安裝依賴 ```bash npm install ``` ### 2. 設置環境變數 複製 `env.example` 到 `.env.local` 並填入正確的資料庫資訊: ```bash cp env.example .env.local ``` ### 3. 執行資料庫遷移 ```bash # 創建資料庫結構 npm run migrate # 重置資料庫(慎用) npm run migrate:reset ``` ### 4. 驗證安裝 遷移完成後,您應該看到: - 25 個資料表 - 3 個統計視圖 - 4 個觸發器 - 初始系統設定數據 ## 🔧 資料庫服務 ### 使用方式 ```typescript import { UserService, CompetitionService, AppService } from '@/lib/services/database-service'; // 創建用戶 const user = await UserService.createUser({ name: '張三', email: 'zhang@example.com', password_hash: 'hashed_password', department: 'IT部門', role: 'developer', join_date: '2024-01-01', total_likes: 0, total_views: 0, is_active: true }); // 獲取用戶統計 const stats = await UserService.getUserStatistics(user.id); // 創建競賽 const competition = await CompetitionService.createCompetition({ name: '2024年AI創新競賽', year: 2024, month: 3, start_date: '2024-03-01', end_date: '2024-03-31', status: 'upcoming', type: 'individual', is_active: true }); ``` ## 📋 資料表關係圖 ``` users (1) ←→ (N) team_members (N) ←→ (1) teams users (1) ←→ (N) apps users (1) ←→ (N) user_favorites users (1) ←→ (N) user_likes users (1) ←→ (N) user_views users (1) ←→ (N) user_ratings competitions (1) ←→ (N) competition_judges (N) ←→ (1) judges competitions (1) ←→ (N) competition_apps (N) ←→ (1) apps competitions (1) ←→ (N) competition_teams (N) ←→ (1) teams competitions (1) ←→ (N) competition_proposals (N) ←→ (1) proposals competitions (1) ←→ (N) awards judges (1) ←→ (N) app_judge_scores (N) ←→ (1) apps judges (1) ←→ (N) proposal_judge_scores (N) ←→ (1) proposals teams (1) ←→ (N) proposals teams (1) ←→ (N) apps ``` ## 🛠️ 維護命令 ### 備份資料庫 ```bash mysqldump -h mysql.theaken.com -P 33306 -u AI_Platform -p db_AI_Platform > backup.sql ``` ### 恢復資料庫 ```bash mysql -h mysql.theaken.com -P 33306 -u AI_Platform -p db_AI_Platform < backup.sql ``` ### 檢查資料庫狀態 ```bash mysql -h mysql.theaken.com -P 33306 -u AI_Platform -p -e "SHOW TABLES;" db_AI_Platform ``` ## 🔍 常見問題 ### Q: 如何重置資料庫? A: 執行 `npm run migrate:reset` 命令,這會刪除所有表並重新創建。 ### Q: 如何添加新的資料表? A: 在 `database-schema.sql` 中添加新的 CREATE TABLE 語句,然後執行 `npm run migrate`。 ### Q: 如何修改現有表結構? A: 使用 ALTER TABLE 語句,或者創建新的遷移腳本。 ### Q: 資料庫連接失敗怎麼辦? A: 檢查環境變數設置,確保資料庫服務正在運行,並且網路連接正常。 ## 📞 技術支援 如有任何資料庫相關問題,請聯繫技術團隊或查看專案文檔。