# 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'; ```