diff --git a/pages/SQL_FILES_CLEANUP_SUMMARY.md b/pages/SQL_FILES_CLEANUP_SUMMARY.md new file mode 100644 index 00000000..9fde0680 --- /dev/null +++ b/pages/SQL_FILES_CLEANUP_SUMMARY.md @@ -0,0 +1,115 @@ +# 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 diff --git a/pages/SQL_FILES_ORGANIZATION.md b/pages/SQL_FILES_ORGANIZATION.md new file mode 100644 index 00000000..f43bd14d --- /dev/null +++ b/pages/SQL_FILES_ORGANIZATION.md @@ -0,0 +1,119 @@ +# 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'; +``` diff --git a/pages/mall/analytics/data-detail.uvue b/pages/mall/analytics/data-detail.uvue index 17425de4..0c85f031 100644 --- a/pages/mall/analytics/data-detail.uvue +++ b/pages/mall/analytics/data-detail.uvue @@ -107,6 +107,7 @@