# 数据分析模块数据库快速开始指南 > 本文档提供数据分析模块数据库的快速部署和使用指南。 ## 📁 文件位置 所有 SQL 脚本和测试文件位于:`pages/mall/analytics/test/` ### 核心文件 | 文件 | 用途 | 执行顺序 | | ------------------------- | -------------------------------- | ----------- | | `ANALYTICS_DB_SCHEMA.sql` | 完整的表结构、索引、RLS、RPC | 1️⃣ | | `ANALYTICS_TEST_SEED.sql` | 完整的测试数据(包含基础业务表) | 2️⃣ | | `01_create_tables.sql` | 分步:创建表结构 | 1️⃣ | | `02_insert_test_data.sql` | 分步:插入测试数据 | 2️⃣ | | `03_test_queries.sql` | 验证查询示例 | 3️⃣(可选) | | `04_cleanup.sql` | 清理测试数据 | ⚠️(需要时) | ### 文档文件 | 文件 | 说明 | | ---------------------------------- | ---------------------------------- | | `test/README.md` | 测试数据说明和使用方法 | | `test/SQL_USAGE_GUIDE.md` | SQL 脚本执行详细指南 | | `docs/ANALYTICS_DB_DESIGN.md` | 数据库设计文档(表结构、字段说明) | | `docs/ANALYTICS_DB_QUICK_START.md` | 快速开始指南(本文档) | ## 🚀 快速部署(3步) ### 方式一:使用完整脚本(推荐) 1. **执行 Schema** ```sql -- 在 Supabase SQL Editor 中执行 -- 复制粘贴 pages/mall/analytics/test/ANALYTICS_DB_SCHEMA.sql 的内容 ``` 2. **插入测试数据** ```sql -- 复制粘贴 pages/mall/analytics/test/ANALYTICS_TEST_SEED.sql 的内容 ``` 3. **验证** ```sql SELECT COUNT(*) FROM analytics_reports; -- 应该返回 3 ``` ### 方式二:使用分步脚本 1. **创建表结构** ```sql \i pages/mall/analytics/test/01_create_tables.sql ``` 2. **插入测试数据** ```sql \i pages/mall/analytics/test/02_insert_test_data.sql ``` 3. **验证数据(可选)** ```sql \i pages/mall/analytics/test/03_test_queries.sql ``` ## 📊 创建的表 ### Analytics 专用表 - `analytics_user_preferences` - 分析师偏好设置 - `analytics_reports` - 报表定义 - `analytics_report_metrics` - 报表核心指标 - `analytics_report_rows` - 报表明细行(趋势数据) - `analytics_insights` - 数据洞察 - `analytics_report_favorites` - 报表收藏 - `analytics_export_jobs` - 导出任务 ### 基础业务表(如果不存在) - `users` - 用户表 - `merchants` - 商家表 - `products` - 商品表 - `orders` - 订单表 - `order_items` - 订单商品表 - `daily_statistics` - 日常统计表 ## 🔐 RLS(权限)策略 所有 `analytics_*` 表已启用 RLS,策略如下: - **用户偏好**:用户只能访问自己的偏好设置 - **报表**:用户可访问自己创建的报表和共享报表(`status = 'shared'`) - **报表数据**:通过 `report_id` 关联,继承报表的访问权限 - **导出任务**:用户只能访问自己的导出任务 ## 🔧 RPC 函数 ### `rpc_analytics_realtime_kpis` 计算实时 KPI(GMV、订单数、在线用户、转化率)及增长率。 **参数:** - `p_start` - 今日起始时间 - `p_end` - 今日结束时间(当前时间) - `p_compare_start` - 昨日对应起始时间 - `p_compare_end` - 昨日对应结束时间 - `p_merchant_id` - 商家ID(可选,NULL表示全站) **返回:** ```sql gmv, gmv_growth, orders, order_growth, online_users, conversion_rate, conversion_growth ``` **前端调用示例:** ```vue ``` ### `rpc_analytics_trend_data` 按日期聚合趋势数据(GMV、订单数、用户数)。 **参数:** - `p_start_date` - 起始日期 - `p_end_date` - 结束日期 - `p_merchant_id` - 商家ID(可选) **返回:** ```sql date, gmv, orders, users ``` ## 📝 测试数据说明 执行 `ANALYTICS_TEST_SEED.sql` 后会创建: - **2个测试分析师用户** - **2个测试商家** - **3个测试商品** - **过去30天的测试订单**(每天5-15个订单) - **3个示例报表**(销售报表、用户分析报表、商家销售报表) - **报表核心指标**(GMV、订单量、转化率、客单价) - **7天趋势数据**(为第一个报表) - **3条数据洞察** - **2个报表收藏** - **3个导出任务记录** - **过去30天的统计数据**(`daily_statistics` 表) ## 🎯 前端使用示例 ### 查询报表列表 ```vue ``` ### 查询报表详情 ```vue ``` ### 查询报表指标 ```vue ``` ### 查询趋势数据 ```vue ``` ### 调用 RPC 获取实时 KPI ```vue ``` ## ⚠️ 注意事项 1. **执行顺序**:必须先执行 Schema,再执行 Seed 2. **基础表依赖**:确保基础业务表(`users`、`merchants`、`orders` 等)已存在 3. **时间依赖**:测试数据使用 `NOW()`,每次执行时间戳会不同 4. **数据冲突**:脚本使用 `ON CONFLICT DO NOTHING`,可重复执行 5. **权限**:确保使用有足够权限的用户执行(如 `postgres`) ## 🔍 验证部署 执行以下查询验证部署是否成功: ```sql -- 检查表是否创建 SELECT table_name FROM information_schema.tables WHERE table_schema = 'public' AND table_name LIKE 'analytics_%' ORDER BY table_name; -- 检查报表数量 SELECT COUNT(*) FROM analytics_reports; -- 应该返回 3 -- 检查 RPC 函数是否存在 SELECT routine_name FROM information_schema.routines WHERE routine_schema = 'public' AND routine_name LIKE 'rpc_analytics_%'; -- 应该看到 rpc_analytics_realtime_kpis 和 rpc_analytics_trend_data -- 测试 RPC 函数 SELECT * FROM rpc_analytics_realtime_kpis( DATE_TRUNC('day', NOW()), NOW(), DATE_TRUNC('day', NOW() - INTERVAL '1 day'), NOW() - INTERVAL '1 day', NULL ); ``` ## 📚 相关文档 - **数据库设计文档**:`pages/mall/analytics/docs/ANALYTICS_DB_DESIGN.md` - **快速开始指南**:`pages/mall/analytics/docs/ANALYTICS_DB_QUICK_START.md`(本文档) - **测试数据说明**:`pages/mall/analytics/test/README.md` - **SQL 使用指南**:`pages/mall/analytics/test/SQL_USAGE_GUIDE.md` - **项目需求文档**:`pages/mall/mall.md`(第2.6节、第10节) ## 🆘 问题排查 如果遇到问题,请检查: 1. **连接问题**:确认 Supabase 服务运行正常 2. **权限问题**:确认使用 `postgres` 用户或有足够权限 3. **表冲突**:如果表已存在,脚本不会报错(使用 `IF NOT EXISTS`) 4. **数据验证**:执行 `03_test_queries.sql` 验证数据 更多帮助请参考:`pages/mall/analytics/test/SQL_USAGE_GUIDE.md`