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

223 lines
5.2 KiB
Markdown

# 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: 檢查環境變數設置,確保資料庫服務正在運行,並且網路連接正常。
## 📞 技術支援
如有任何資料庫相關問題,請聯繫技術團隊或查看專案文檔。