# SQL 文件整理说明

## 📋 重复内容分析

经过检查，发现以下重复定义：

### 1. **`users` 表**（重复）
- ✅ `pages/user/test/USER_AUTH_SCHEMA.sql` (第 63-71 行)
- ✅ `pages/mall/analytics/test/01_create_tables.sql` (第 43-51 行)
- **状态**：两个定义相同，使用 `CREATE TABLE IF NOT EXISTS` 不会冲突，但建议统一

### 2. **`user_sessions` 表**（重复，定义略有不同）
- ✅ `pages/user/test/USER_AUTH_SCHEMA.sql` (第 76-86 行) - **完整定义**（推荐）
- ✅ `pages/mall/analytics/test/01_create_tables.sql` (第 24-34 行) - **完整定义**（相同）
- ⚠️ `pages/mall/analytics/test/ANALYTICS_DB_SCHEMA.sql` (第 19-25 行) - **简化定义**（字段较少）

### 3. **`page_views` 表**（重复，定义不同）
- ✅ `pages/mall/analytics/test/01_create_tables.sql` (第 90-99 行) - **完整定义**（推荐）
- ⚠️ `pages/mall/analytics/test/ANALYTICS_DB_SCHEMA.sql` (第 30-36 行) - **简化定义**（字段较少）

### 4. **`update_updated_at_column` 函数**（重复）
- ✅ `pages/user/test/USER_AUTH_SCHEMA.sql` (第 93-99 行)
- ✅ `pages/mall/analytics/test/01_create_tables.sql` (第 107-113 行)
- **状态**：两个定义相同，使用 `CREATE OR REPLACE FUNCTION` 不会冲突

### 5. **触发器**（部分重复）
- `USER_AUTH_SCHEMA.sql`: `update_users_updated_at`, `update_user_sessions_updated_at`
- `01_create_tables.sql`: `update_orders_updated_at`, `update_user_sessions_updated_at`, `update_users_updated_at`

---

## 🎯 整理方案

### 方案一：保持现状（推荐）
**优点**：每个文件独立，使用 `IF NOT EXISTS` 和 `CREATE OR REPLACE` 不会冲突
**缺点**：有重复代码

**执行顺序**：
1. `pages/user/test/USER_AUTH_SCHEMA.sql` - 创建用户认证相关表
2. `pages/mall/analytics/test/01_create_tables.sql` - 创建业务表（会跳过已存在的表）
3. `pages/mall/analytics/test/ANALYTICS_DB_SCHEMA.sql` - 创建分析表（会跳过已存在的表）

### 方案二：统一到基础表文件（更清晰）
**优点**：减少重复，职责清晰
**缺点**：需要重构文件结构

**建议结构**：
- `00_base_tables.sql` - 基础表（users, user_sessions, page_views）
- `01_user_auth.sql` - 用户认证表（ak_users）和函数
- `02_business_tables.sql` - 业务表（orders, products, merchants等）
- `03_analytics_tables.sql` - 分析表（analytics_*）

---

## 📝 当前文件职责

### `pages/user/test/` 目录
- **`USER_AUTH_SCHEMA.sql`** - 用户认证核心表（ak_users, users, user_sessions）和 RPC 函数
- **`USER_AUTH_TRIGGER.sql`** - 数据库触发器（自动创建 ak_users）
- **`USER_AUTH_TEST_DATA.sql`** - 测试数据

### `pages/mall/analytics/test/` 目录
- **`01_create_tables.sql`** - 业务表（orders, users, user_sessions, products, merchants, order_items, page_views）+ RLS
- **`ANALYTICS_DB_SCHEMA.sql`** - 分析表（analytics_*）+ RPC 函数
- **`02_insert_test_data.sql`** - 业务表测试数据
- **`ANALYTICS_TEST_SEED.sql`** - 分析表测试数据
- **`03_test_queries.sql`** - 测试查询
- **`04_cleanup.sql`** - 清理脚本

---

## ✅ 推荐操作

### 立即执行（保持现状）
当前文件结构可以使用，因为：
1. 所有表使用 `CREATE TABLE IF NOT EXISTS`
2. 所有函数使用 `CREATE OR REPLACE FUNCTION`
3. 触发器使用 `CREATE TRIGGER IF NOT EXISTS` 或 `DROP TRIGGER IF EXISTS`

**执行顺序**：
```sql
-- 1. 用户认证表
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. 分析表（会跳过已存在的 user_sessions, page_views）
pages/mall/analytics/test/ANALYTICS_DB_SCHEMA.sql
```

### 未来优化（可选）
如果需要减少重复，可以：
1. 从 `ANALYTICS_DB_SCHEMA.sql` 中移除 `user_sessions` 和 `page_views` 的简化定义
2. 确保 `01_create_tables.sql` 先执行，提供完整定义
3. 在 `ANALYTICS_DB_SCHEMA.sql` 中添加注释说明依赖关系

---

## 🔍 验证重复

执行以下查询检查表是否存在：
```sql
-- 检查 users 表
SELECT column_name, data_type 
FROM information_schema.columns 
WHERE table_name = 'users' AND table_schema = 'public';

-- 检查 user_sessions 表
SELECT column_name, data_type 
FROM information_schema.columns 
WHERE table_name = 'user_sessions' AND table_schema = 'public';

-- 检查 page_views 表
SELECT column_name, data_type 
FROM information_schema.columns 
WHERE table_name = 'page_views' AND table_schema = 'public';
```
