# 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