# 商城数据库快速部署指南 ## 🚀 快速开始 ### 第一步:创建数据库结构 ```sql -- 执行主数据库脚本 \i complete_mall_database.sql ``` ### 第二步:插入测试数据 ```sql -- 执行模拟数据脚本 \i mock_data_insert.sql ``` ## 📋 执行顺序 1. **complete_mall_database.sql** - 创建完整的数据库结构 2. **mock_data_insert.sql** - 插入测试数据(可选) ## 🔧 PostgreSQL 执行方式 ### 方式一:psql 命令行 ```bash # 连接数据库 psql -h localhost -U your_username -d your_database # 执行脚本 \i /path/to/complete_mall_database.sql \i /path/to/mock_data_insert.sql ``` ### 方式二:直接执行 ```bash psql -h localhost -U your_username -d your_database -f complete_mall_database.sql psql -h localhost -U your_username -d your_database -f mock_data_insert.sql ``` ## ☁️ Supabase 执行方式 ### SQL Editor 执行 1. 登录 Supabase Dashboard 2. 进入 SQL Editor 3. 复制粘贴 `complete_mall_database.sql` 内容 4. 点击 Run 执行 5. 重复步骤执行 `mock_data_insert.sql` ### 注意事项 - Supabase 可能需要分段执行大型脚本 - 确保有足够的权限创建扩展和表 ## 🧪 测试验证 ### 验证数据库结构 ```sql -- 检查表是否创建成功 SELECT table_name FROM information_schema.tables WHERE table_schema = 'public' AND table_name LIKE 'ml_%' ORDER BY table_name; -- 检查用户数据 SELECT COUNT(*) as user_count FROM public.ak_users; SELECT COUNT(*) as profile_count FROM public.ml_user_profiles; ``` ### 验证测试数据 ```sql -- 检查商品数据 SELECT COUNT(*) as product_count FROM public.ml_products; SELECT COUNT(*) as sku_count FROM public.ml_product_skus; -- 检查订单数据 SELECT COUNT(*) as order_count FROM public.ml_orders; SELECT COUNT(*) as order_item_count FROM public.ml_order_items; -- 检查用户角色分布 SELECT user_type, COUNT(*) as count, CASE WHEN user_type = 1 THEN '消费者' WHEN user_type = 2 THEN '商家' WHEN user_type = 3 THEN '配送员' WHEN user_type = 4 THEN '客服' WHEN user_type = 5 THEN '管理员' END as role_name FROM public.ml_user_profiles GROUP BY user_type; ``` ## 🎯 测试用户登录信息 ### 管理员 - **用户名**: admin - **邮箱**: admin@mall.com ### 商家 - **商家1**: merchant1 / merchant1@mall.com - **商家2**: merchant2 / merchant2@mall.com ### 消费者 - **用户1**: customer1 / customer1@mall.com - **用户2**: customer2 / customer2@mall.com - **用户3**: customer3 / customer3@mall.com ### 配送员 - **配送员1**: driver1 / driver1@mall.com - **配送员2**: driver2 / driver2@mall.com ## 🔐 权限说明 ### RLS (Row Level Security) 策略 - 已为所有用户数据表启用RLS - 用户只能访问自己的数据 - 商家可以管理自己的商品和订单 - 详细权限请查看 `complete_mall_database.sql` ### 测试权限 ```sql -- 验证RLS策略 SET ROLE authenticated; SET session.user_id = 'user-uuid-here'; -- 测试用户数据访问 SELECT * FROM public.ml_user_profiles; SELECT * FROM public.ml_shopping_cart; ``` ## 📊 性能优化验证 ### 索引检查 ```sql -- 检查索引创建情况 SELECT schemaname, tablename, indexname, indexdef FROM pg_indexes WHERE schemaname = 'public' AND tablename LIKE 'ml_%' ORDER BY tablename, indexname; ``` ### 查询性能测试 ```sql -- 测试商品搜索性能 EXPLAIN ANALYZE SELECT * FROM public.ml_products WHERE status = 1 AND name ILIKE '%iPhone%' ORDER BY created_at DESC LIMIT 20; -- 测试用户订单查询性能 EXPLAIN ANALYZE SELECT * FROM public.ml_orders WHERE user_id = 'some-user-id' ORDER BY created_at DESC LIMIT 10; ``` ## 🚨 常见问题 ### 1. 扩展创建失败 ``` ERROR: permission denied to create extension "uuid-ossp" ``` **解决方案**: 确保数据库用户有 SUPERUSER 权限或请求管理员创建扩展 ### 2. RLS策略错误 ``` ERROR: syntax error at or near "," ``` **解决方案**: 确保使用的是修正后的 `complete_mall_database.sql` 脚本 ### 3. 模拟数据插入失败 ``` ERROR: insert or update on table violates foreign key constraint ``` **解决方案**: 确保先执行 `complete_mall_database.sql` 创建表结构 ### 4. Supabase 脚本执行超时 **解决方案**: 将大型脚本分段执行,或在本地执行后同步 ## 🔄 数据更新 ### 清理测试数据 ```sql -- 清理模拟数据(保留表结构) TRUNCATE TABLE public.ml_product_reviews CASCADE; TRUNCATE TABLE public.ml_order_items CASCADE; TRUNCATE TABLE public.ml_orders CASCADE; TRUNCATE TABLE public.ml_shopping_cart CASCADE; -- ... 其他表 ``` ### 重新插入数据 ```sql -- 重新执行模拟数据脚本 \i mock_data_insert.sql ``` ## 📝 部署检查清单 - [ ] 数据库连接正常 - [ ] 扩展创建成功 (uuid-ossp, pg_stat_statements, btree_gin) - [ ] 所有表创建成功 (21张 ml_ 表) - [ ] 索引创建成功 (30+ 个索引) - [ ] 触发器创建成功 (8个触发器) - [ ] 函数创建成功 (10+ 个函数) - [ ] 视图创建成功 (3个视图) - [ ] RLS策略启用成功 - [ ] 测试数据插入成功 - [ ] 权限验证通过 - [ ] 性能测试通过 --- **部署完成后建议**: 运行基本的API测试,验证所有功能模块正常工作。