Files
akmon/doc_mall/database/deployment_guide.md
2026-01-20 08:04:15 +08:00

224 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 商城数据库快速部署指南
## 🚀 快速开始
### 第一步:创建数据库结构
```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测试验证所有功能模块正常工作。