Files
ai-showcase-platform/README-DATABASE.md

5.2 KiB

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. 安裝依賴

npm install

2. 設置環境變數

複製 env.example.env.local 並填入正確的資料庫資訊:

cp env.example .env.local

3. 執行資料庫遷移

# 創建資料庫結構
npm run migrate

# 重置資料庫(慎用)
npm run migrate:reset

4. 驗證安裝

遷移完成後,您應該看到:

  • 25 個資料表
  • 3 個統計視圖
  • 4 個觸發器
  • 初始系統設定數據

🔧 資料庫服務

使用方式

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

🛠️ 維護命令

備份資料庫

mysqldump -h mysql.theaken.com -P 33306 -u AI_Platform -p db_AI_Platform > backup.sql

恢復資料庫

mysql -h mysql.theaken.com -P 33306 -u AI_Platform -p db_AI_Platform < backup.sql

檢查資料庫狀態

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: 檢查環境變數設置,確保資料庫服務正在運行,並且網路連接正常。

📞 技術支援

如有任何資料庫相關問題,請聯繫技術團隊或查看專案文檔。