# Mall SQL 数据库脚本集合

> **电商商城系统** - PostgreSQL + Supabase 数据库脚本总目录

---

## 📁 目录结构

```
mall_sql/
├── schemas/              # 数据库表结构定义
├── migrations/           # 数据库迁移/升级脚本
├── tests/                # 测试和验证脚本
├── subscription/         # 订阅系统专用脚本
├── scripts/              # 迁移脚本 (migrate.sh/ps1)
├── docs/                 # 数据库文档
├── deploy.sh             # Linux/Mac 自动部署脚本
├── deploy.bat            # Windows 自动部署脚本
└── README.md             # 本文件
```

---

## 🚀 快速开始

### 首次部署（全新数据库）

```bash
# 1. 执行完整数据库创建
psql -h db.example.com -U postgres -d akmon -f schemas/complete_mall_database.sql

# 2. 创建测试用户和模拟数据
psql -h db.example.com -U postgres -d akmon -f tests/mock_data_insert.sql
```

### 增量升级（已有数据库）

```bash
# 1. 先检查数据库状态
psql -h db.example.com -U postgres -d akmon -f tests/mall_database_check.sql

# 2. 执行增量升级
psql -h db.example.com -U postgres -d akmon -f migrations/mall_alter_upgrade.sql
```

---

## 📦 schemas/ - 数据库表结构

| 文件 | 说明 | 执行顺序 |
|------|------|----------|
| `complete_mall_database.sql` | 完整商城数据库（21个表）**推荐** | 1 |
| `ak_contents_product_extension.sql` | **备选方案**: 基于ak_contents扩展商品 | - |
| `product_database.sql` | 商品相关表补充 | 2 |
| `mall_seo_security.sql` | SEO优化和安全策略 | 3 |

### 两种实现方案

**方案一: 独立商城表（推荐）**
- 使用 `ml_products` 等独立表
- 执行: `complete_mall_database.sql`
- 优点: 职责清晰，不影响资讯系统

**方案二: 扩展ak_contents表（备选）**
- 复用 `ak_contents` 表，添加商品字段
- 执行: `ak_contents_product_extension.sql`
- 优点: 统一内容管理，但混合了资讯和商品

### complete_mall_database.sql

完整的商城系统数据库定义，包含：

**用户模块**:
- `ml_user_profiles` - 用户扩展信息
- `ml_user_addresses` - 用户地址

**商品模块**:
- `ml_categories` - 商品分类
- `ml_brands` - 品牌
- `ml_products` - 商品主表
- `ml_product_skus` - SKU规格
- `ml_product_images` - 商品图片

**订单模块**:
- `ml_orders` - 订单主表
- `ml_order_items` - 订单明细
- `ml_order_status_log` - 订单状态日志

**配送模块**:
- `ml_delivery_tasks` - 配送任务
- `ml_delivery_tracking` - 配送跟踪

**支付模块**:
- `ml_payments` - 支付记录

**营销模块**:
- `ml_coupons` - 优惠券
- `ml_user_coupons` - 用户优惠券

**订阅模块**:
- `ml_subscriptions` - 订阅计划
- `ml_user_subscriptions` - 用户订阅

---

## 🔄 migrations/ - 数据库迁移

| 文件 | 说明 | 使用场景 |
|------|------|----------|
| `mall_alter_upgrade.sql` | 完整增量升级 | 生产环境升级 |
| `mall_fields_only_upgrade.sql` | 仅字段升级 | 最小化修改 |
| `quick_role_migration.sql` | 角色字段快速迁移 | user_type→role |
| `mall_migration.sql` | 通用迁移脚本 | 兼容性处理 |
| `role_field_unification.sql` | 角色字段统一 | 数据一致性 |
| `role_field_cleanup.sql` | 角色字段清理 | 清理冗余字段 |
| `user_compatibility_implementation.sql` | 用户兼容性实现 | 跨模块兼容 |

### 重要迁移说明

**角色字段统一**:
- 旧字段: `user_type` (INTEGER)
- 新字段: `role` (TEXT)
- 迁移脚本: `quick_role_migration.sql`

**角色值映射**:
| user_type | role |
|-----------|------|
| 1 | 'admin' |
| 2 | 'merchant' |
| 3 | 'customer' |
| 4 | 'delivery' |
| 5 | 'service' |

---

## 🧪 tests/ - 测试和验证

| 文件 | 说明 |
|------|------|
| `mall_database_check.sql` | 数据库状态检查 |
| `validation_test.sql` | 数据完整性验证 |
| `verify_mock_data_fix.sql` | 模拟数据修复验证 |
| `mock_data_insert.sql` | 创建测试数据 |
| `create_supabase_auth_users.sql` | 创建Supabase Auth用户 |

### 测试数据说明

`mock_data_insert.sql` 创建以下测试数据：
- 1个管理员
- 2个商家
- 10个商品
- 3个客户
- 20个订单
- 2个配送员
- 5个配送任务

---

## 📬 subscription/ - 订阅系统

| 文件 | 说明 |
|------|------|
| `create_mall_subscription_tables.sql` | 订阅表创建 |
| `subscription_guard_trigger.sql` | 订阅守护触发器 |
| `subscription_rls_policies.sql` | 订阅RLS安全策略 |

### 订阅系统表

- `ml_subscriptions` - 订阅计划定义
- `ml_user_subscriptions` - 用户订阅记录
- `ml_subscription_payments` - 订阅支付记录

---

## 📚 docs/ - 文档

### 核心文档
| 文件 | 说明 |
|------|------|
| `MALL_README.md` | 商城系统主文档 |
| `TECHNICAL_IMPLEMENTATION.md` | 技术实现详解 |
| `MODULE_ANALYSIS.md` | 模块分析 |

### 部署与升级
| 文件 | 说明 |
|------|------|
| `UPGRADE_GUIDE.md` | 数据库升级指南 |
| `MIGRATION_GUIDE.md` | 迁移指南 |
| `QUICK_START_MIGRATION.md` | 快速迁移指南 |
| `MIGRATION_CHECKLIST.md` | 迁移检查清单 |
| `MIGRATION_SUMMARY.md` | 迁移总结 |
| `complete_deployment_guide.md` | 完整部署指南 |
| `deployment_guide.md` | 部署指南 |
| `migration_complete_report.md` | 迁移完成报告 |

### 角色与权限
| 文件 | 说明 |
|------|------|
| `ROLE_FIELD_SUMMARY.md` | 角色字段变更总结 |
| `ROLE_FIELD_FIX_REPORT.md` | 角色字段修复报告 |
| `user_reuse_summary.md` | 用户复用总结 |

### 问题修复报告
| 文件 | 说明 |
|------|------|
| `VARIABLE_CONFLICT_FIX_REPORT.md` | 变量冲突修复 |
| `database_syntax_fix_report.md` | 数据库语法修复 |
| `type_error_fix_report.md` | 类型错误修复 |

### 测试与数据
| 文件 | 说明 |
|------|------|
| `mock_data_documentation.md` | 测试数据文档 |
| `database_creation_report.md` | 数据库创建报告 |
| `FRONTEND_BACKEND_DEBUGGING.md` | 前后端调试指南 |

### SEO与优化
| 文件 | 说明 |
|------|------|
| `seo_optimization_guide.md` | SEO优化指南 |
| `seo_optimization_report.md` | SEO优化报告 |

### 订阅系统
| 文件 | 说明 |
|------|------|
| `README_subscription_consumer.md` | 订阅系统说明 |
| `裂变红包.md` | 裂变红包功能 |

### 页面报告
| 目录 | 说明 |
|------|------|
| `docs/reports/` | 页面生成报告 |
| `docs/analysis/` | 兼容性分析 |

---

## 🗄️ 数据库表总览

```
akmon (PostgreSQL Database)
│
├── public.ak_users                    # 用户主表（共享）
│
└── public.ml_* (商城系统表，21张)
    ├── ml_user_profiles               # 用户扩展信息
    ├── ml_user_addresses              # 用户地址
    ├── ml_categories                  # 商品分类
    ├── ml_brands                      # 品牌
    ├── ml_products                    # 商品
    ├── ml_product_skus                # SKU
    ├── ml_product_images              # 商品图片
    ├── ml_orders                      # 订单
    ├── ml_order_items                 # 订单明细
    ├── ml_order_status_log            # 订单日志
    ├── ml_delivery_tasks              # 配送任务
    ├── ml_delivery_tracking           # 配送跟踪
    ├── ml_payments                     # 支付
    ├── ml_coupons                     # 优惠券
    ├── ml_user_coupons                # 用户优惠券
    ├── ml_subscriptions               # 订阅计划
    ├── ml_user_subscriptions          # 用户订阅
    ├── ml_subscription_payments       # 订阅支付
    ├── ml_merchant_profiles            # 商家资料
    ├── ml_delivery_staff              # 配送员
    └── ml_notifications               # 通知
```

---

## 🔧 常用SQL操作

### 检查表是否存在
```sql
SELECT table_name, table_type
FROM information_schema.tables
WHERE table_schema = 'public'
  AND table_name LIKE 'ml_%'
ORDER BY table_name;
```

### 查看表结构
```sql
\d+ public.ml_products
-- 或
SELECT column_name, data_type, is_nullable, column_default
FROM information_schema.columns
WHERE table_schema = 'public'
  AND table_name = 'ml_products'
ORDER BY ordinal_position;
```

### 检查索引
```sql
SELECT indexname, indexdef
FROM pg_indexes
WHERE schemaname = 'public'
  AND tablename LIKE 'ml_%'
ORDER BY tablename, indexname;
```

### 检查RLS策略
```sql
SELECT schemaname, tablename, policyname, permissive, roles, cmd, qual
FROM pg_policies
WHERE schemaname = 'public'
  AND tablename LIKE 'ml_%'
ORDER BY tablename, policyname;
```

---

## ⚠️ 注意事项

### 执行顺序

1. **全新部署**: 按以下顺序执行
   - `schemas/complete_mall_database.sql`
   - `schemas/product_database.sql`
   - `schemas/mall_seo_security.sql`
   - `subscription/create_mall_subscription_tables.sql`
   - `tests/mock_data_insert.sql`

2. **增量升级**: 先检查后升级
   - `tests/mall_database_check.sql`
   - 根据检查结果选择合适的迁移脚本
   - `tests/validation_test.sql`

### Supabase Auth 用户

在执行任何脚本之前，**必须先创建 Supabase Auth 用户**：
```bash
psql -f tests/create_supabase_auth_users.sql
```

### 角色字段兼容性

如果你的数据库使用旧的 `user_type` 字段，请先执行角色迁移：
```bash
psql -f migrations/quick_role_migration.sql
```

---

## 📞 支持

如有问题，请查阅：
1. `docs/complete_deployment_guide.md` - 完整部署指南
2. `docs/UPGRADE_GUIDE.md` - 升级指南
3. `docs/ROLE_FIELD_SUMMARY.md` - 角色字段说明

---

**最后更新**: 2026-01-30
**维护者**: AKMON开发团队
