Files
medical-mall/mall/pages/SQL_FILES_ORGANIZATION.md

4.5 KiB
Raw Blame History

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 EXISTSCREATE 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 EXISTSDROP 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

未来优化(可选)

如果需要减少重复,可以:

  1. ANALYTICS_DB_SCHEMA.sql 中移除 user_sessionspage_views 的简化定义
  2. 确保 01_create_tables.sql 先执行,提供完整定义
  3. 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';