# SaaSShop 数据库结构迁移（SQL 版）

> 目标：数据库**结构变更**以 SQL 脚本形式版本化，便于在新环境 / CI（Gitee Go）自动执行。
> 
> 约束：只推结构变更，不推业务数据。

## 目录与命名

- 脚本目录：`database/migrations/`
- 命名规则：`V{数字}__{描述}.sql`
  - 示例：`V2__add_platform_order_indexes.sql`
  - 数字必须递增（V1、V2、V3...）

## 执行方式

### 1）Laravel 原生迁移

首次初始化仍执行 Laravel migration（PHP 迁移），用于建立基础表：

```bash
php artisan migrate --force
```

### 2）SQL 脚本迁移

执行 SQL 结构迁移：

```bash
composer run db:sql-migrate
# 或
php scripts/sql_migrate.php
```

该命令会：
- 扫描 `database/migrations/V*__*.sql`
- 按版本号升序执行
- 执行成功后写入记录表 `schema_sql_migrations`

## 记录表

- 表名：`schema_sql_migrations`
- 字段：
  - `version`：如 `V1` / `V2`
  - `description`：从文件名解析
  - `applied_at`：执行时间

## 编写脚本建议

- **仅结构变更**：CREATE/ALTER/DROP/INDEX 等
- 不写 INSERT/UPDATE 业务数据（除非是结构初始化必要数据，且要评估影响）
- 每个脚本尽量“可重复执行”或在脚本内加存在性判断（视具体 DB 方言支持）

## 新环境落地步骤（推荐）

```bash
git clone <repo>
cd saasshop
composer install
cp .env.example .env
php artisan key:generate
php artisan migrate --force
composer run db:sql-migrate
php artisan test
```

## CI（Gitee Go）

仓库内提供 `.gitee/go.yml` 模板，需在 Gitee Go 中配置数据库连接与环境变量后启用。
