224 lines
5.2 KiB
Markdown
224 lines
5.2 KiB
Markdown
# 商城数据库快速部署指南
|
||
|
||
## 🚀 快速开始
|
||
|
||
### 第一步:创建数据库结构
|
||
```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测试,验证所有功能模块正常工作。
|