# Aether - 数据库迁移说明

## 当前版本

- **Revision ID**: `aether_baseline`
- **创建日期**: 2025-12-06
- **状态**: 全新基线

## 迁移历史

所有历史增量迁移已清理，当前以完整 schema 作为新起点。

## 核心数据库结构

### 用户系统
- **users**: 用户账户管理
- **api_keys**: API 密钥管理
- **user_quotas**: 用户配额管理
- **user_preferences**: 用户偏好设置

### Provider 三层架构
- **providers**: LLM 提供商配置
- **provider_endpoints**: Provider 的 API 端点配置
- **provider_api_keys**: Endpoint 的具体 API 密钥
- **api_key_provider_mappings**: 用户 API Key 到 Provider 的映射关系

### 模型系统
- **global_models**: 统一模型定义（GlobalModel）
- **models**: Provider 的模型实现和价格配置
- **model_mappings**: 统一的别名与降级映射表

### 监控和追踪
- **usage**: API 使用记录
- **request_candidates**: 请求候选记录
- **provider_usage_tracking**: Provider 使用统计
- **audit_logs**: 系统审计日志

### 系统功能
- **announcements**: 系统公告
- **announcement_reads**: 公告阅读记录
- **system_configs**: 系统配置

## 从旧数据库迁移

如需从旧数据库迁移数据，请使用迁移脚本：

```bash
# 设置环境变量
export OLD_DATABASE_URL="postgresql://user:pass@old-host:5432/old_db"
export NEW_DATABASE_URL="postgresql://user:pass@new-host:5432/aether"

# 干运行（查看迁移量）
python scripts/migrate_data.py --dry-run

# 执行迁移
python scripts/migrate_data.py

# 只迁移特定表
python scripts/migrate_data.py --tables users,providers,api_keys

# 跳过大表
python scripts/migrate_data.py --skip usage,audit_logs
```

## 新数据库初始化

```bash
# 1. 运行迁移创建表结构
DATABASE_URL="postgresql://user:pass@host:5432/aether" uv run alembic upgrade head

# 2. 初始化管理员账户
python -m src.database.init_db
```

## 未来迁移

基于 `aether_baseline` 创建增量迁移：

```bash
# 修改模型后，生成新的迁移
DATABASE_URL="..." uv run alembic revision --autogenerate -m "描述变更"

# 应用迁移
DATABASE_URL="..." uv run alembic upgrade head
```
