# 10 质量自检与验收（表/字段/索引/扩展/函数）

本节汇总仓库中已有的“数据库状态检查/验证脚本”，并给出在交付与升级时推荐的自检流程。

---

## 1. 现有自检脚本清单

在 `mall_sql/tests/` 目录下可见：

- `mall_database_check.sql`
  - 检查 `ak_users` 是否缺少商城字段
  - 检查商城核心表是否存在
  - 检查关键索引是否存在
  - 检查必要扩展是否安装
  - 检查关键函数是否存在
  - 输出“推荐执行方案”（fields_only / alter_upgrade / migration / seo_security 等）
  - 可生成具体 `ALTER TABLE` 建议

- `validation_test.sql`（存在即表示有更细校验，建议结合实际内容补充到本文档）
- `mock_data_insert.sql` / `verify_mock_data_fix.sql`
  - 用于联调/验证查询与页面
- `create_supabase_auth_users.sql`
  - 可能用于创建 Supabase auth 用户或测试映射

---

## 2. 推荐自检流程（交付/升级）

### 2.1 升级前（评估现状）

1. 执行 `mall_database_check.sql`
2. 根据输出信息确认：
   - `ak_users` 缺哪些字段
   - `ml_` 核心表缺哪些
   - 关键索引是否齐全
   - 扩展是否安装
   - 函数是否缺失

### 2.2 执行升级/迁移

根据 `mall_database_check.sql` 给出的推荐：

- 缺字段多 + 缺表：`mall_alter_upgrade.sql`
- 只缺字段：`mall_fields_only_upgrade.sql`
- 只缺表：`mall_migration.sql`
- SEO/RLS 缺失：`mall_seo_security.sql`

### 2.3 升级后（验证验收）

1. 再次执行 `mall_database_check.sql`，确认缺失项归零
2.（测试环境）插入 mock 数据（若有脚本）
3. 跑核心链路的“最小验收用例”（见下）

---

## 3. 最小验收用例（建议团队固化）

### 3.1 用户侧

- 能创建/更新 `ml_user_profiles`
- 能新增地址并设置默认，确认默认地址唯一
- 能加购、更新购物车数量

### 3.2 商品侧

- 能创建商品 + SKU
- 更新 SKU 库存，确认 `ml_products.total_stock/available_stock` 自动刷新
- 商品上架后，普通用户侧可查询到（RLS/策略允许）

### 3.3 订单侧

- 能创建订单 + 明细
- 更新订单状态（1->2->3->4），确认时间戳与销量累计逻辑（若使用 complete 脚本触发器）

### 3.4 营销/优惠券

- 创建券模板
- 领券生成券码
- 核销券并绑定订单

---

## 4. 注意事项

- 生产执行前务必在测试环境验证脚本兼容性与执行顺序。
- 若启用 RLS，检查脚本/运维脚本需要使用 service role 或具有相应权限的连接方式，否则可能误判数据可见性。
- 如新增状态枚举值，需同步更新：
  - `CHECK` 约束
  - 相关触发器/函数
  - 文档字典（`03_enums_status_dict.md`）
