116 lines
4.0 KiB
Markdown
116 lines
4.0 KiB
Markdown
# 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
|