4.5 KiB
4.5 KiB
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_at01_create_tables.sql:update_orders_updated_at,update_user_sessions_updated_at,update_users_updated_at
🎯 整理方案
方案一:保持现状(推荐)
优点:每个文件独立,使用 IF NOT EXISTS 和 CREATE OR REPLACE 不会冲突
缺点:有重复代码
执行顺序:
pages/user/test/USER_AUTH_SCHEMA.sql- 创建用户认证相关表pages/mall/analytics/test/01_create_tables.sql- 创建业务表(会跳过已存在的表)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)+ RLSANALYTICS_DB_SCHEMA.sql- 分析表(analytics_*)+ RPC 函数02_insert_test_data.sql- 业务表测试数据ANALYTICS_TEST_SEED.sql- 分析表测试数据03_test_queries.sql- 测试查询04_cleanup.sql- 清理脚本
✅ 推荐操作
立即执行(保持现状)
当前文件结构可以使用,因为:
- 所有表使用
CREATE TABLE IF NOT EXISTS - 所有函数使用
CREATE OR REPLACE FUNCTION - 触发器使用
CREATE TRIGGER IF NOT EXISTS或DROP TRIGGER IF EXISTS
执行顺序:
-- 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
未来优化(可选)
如果需要减少重复,可以:
- 从
ANALYTICS_DB_SCHEMA.sql中移除user_sessions和page_views的简化定义 - 确保
01_create_tables.sql先执行,提供完整定义 - 在
ANALYTICS_DB_SCHEMA.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';