# SQL 文件整理完成

## ✅ 已完成的整理

### 1. 移除重复的简化表定义
- ✅ 从 `ANALYTICS_DB_SCHEMA.sql` 中移除了简化的 `user_sessions` 和 `page_views` 定义
- ✅ 添加了注释说明依赖关系

### 2. 添加依赖说明
- ✅ 在 `01_create_tables.sql` 中添加了注释，说明可能与 `USER_AUTH_SCHEMA.sql` 重复
- ✅ 在 `USER_AUTH_SCHEMA.sql` 中添加了注释，说明可能与 `01_create_tables.sql` 重复

---

## 📋 当前文件结构

### `pages/user/test/` - 用户认证相关
1. **`USER_AUTH_SCHEMA.sql`** ⭐
   - `ak_users` 表（业务用户资料）
   - `users` 表（统计用，可能与 analytics 重复）
   - `user_sessions` 表（会话统计，可能与 analytics 重复）
   - `upsert_user_profile` RPC 函数
   - `handle_new_user` 触发器函数（注释中）

2. **`USER_AUTH_TRIGGER.sql`** ⭐
   - `on_auth_user_created` 触发器（在 auth.users 插入时自动创建 ak_users）

3. **`USER_AUTH_TEST_DATA.sql`**（可选）
   - 测试数据

### `pages/mall/analytics/test/` - 数据分析相关
1. **`01_create_tables.sql`** ⭐
   - 业务核心表：`orders`, `order_items`, `products`, `merchants`
   - 统计表：`users`, `user_sessions`, `page_views`（可能与 USER_AUTH_SCHEMA.sql 重复）
   - RLS 策略
   - `update_updated_at_column` 函数和触发器

2. **`ANALYTICS_DB_SCHEMA.sql`** ⭐
   - 分析表：`analytics_*` 系列表
   - RPC 函数（用于数据分析）
   - **已移除**：简化的 `user_sessions` 和 `page_views` 定义

3. **`02_insert_test_data.sql`**（可选）
   - 业务表测试数据

4. **`ANALYTICS_TEST_SEED.sql`**（可选）
   - 分析表测试数据

5. **`03_test_queries.sql`**（可选）
   - 测试查询

6. **`04_cleanup.sql`**（可选）
   - 清理脚本

---

## 🚀 推荐执行顺序

### 首次部署
```sql
-- 1. 用户认证表（包含 users, user_sessions）
pages/user/test/USER_AUTH_SCHEMA.sql
pages/user/test/USER_AUTH_TRIGGER.sql

-- 2. 业务表（会跳过已存在的 users, user_sessions）
pages/mall/analytics/test/01_create_tables.sql

-- 3. 分析表（依赖业务表）
pages/mall/analytics/test/ANALYTICS_DB_SCHEMA.sql

-- 4. 测试数据（可选）
pages/mall/analytics/test/02_insert_test_data.sql
pages/mall/analytics/test/ANALYTICS_TEST_SEED.sql
```

### 后续更新
- 如果只更新分析表，只需执行 `ANALYTICS_DB_SCHEMA.sql`
- 如果只更新业务表，只需执行 `01_create_tables.sql`
- 如果只更新用户认证，只需执行 `USER_AUTH_SCHEMA.sql`

---

## 🔍 重复内容说明

### 已处理的重复
1. ✅ **`user_sessions` 表** - 保留在 `USER_AUTH_SCHEMA.sql` 和 `01_create_tables.sql` 中的完整定义，移除 `ANALYTICS_DB_SCHEMA.sql` 中的简化定义
2. ✅ **`page_views` 表** - 保留在 `01_create_tables.sql` 中的完整定义，移除 `ANALYTICS_DB_SCHEMA.sql` 中的简化定义

### 保留的重复（安全）
1. **`users` 表** - 在 `USER_AUTH_SCHEMA.sql` 和 `01_create_tables.sql` 中都有定义，使用 `IF NOT EXISTS` 不会冲突
2. **`update_updated_at_column` 函数** - 在多个文件中定义，使用 `CREATE OR REPLACE FUNCTION` 不会冲突
3. **触发器** - 使用 `IF NOT EXISTS` 或 `DROP TRIGGER IF EXISTS` 确保不会冲突

---

## ✅ 验证

执行以下查询验证表结构：
```sql
-- 检查 user_sessions 表字段（应该是完整定义）
SELECT column_name, data_type, is_nullable
FROM information_schema.columns 
WHERE table_name = 'user_sessions' AND table_schema = 'public'
ORDER BY ordinal_position;

-- 检查 page_views 表字段（应该是完整定义）
SELECT column_name, data_type, is_nullable
FROM information_schema.columns 
WHERE table_name = 'page_views' AND table_schema = 'public'
ORDER BY ordinal_position;
```

**预期结果**：
- `user_sessions` 应包含：id, user_id, session_token, last_active_at, is_active, ip_address, user_agent, created_at, updated_at
- `page_views` 应包含：id, user_id, path, source, referrer, ip_address, user_agent, created_at
