## ADDED Requirements

### Requirement: 一期资产表集合
系统 SHALL 在获得单独数据库授权后，仅为资产后台一期创建 `company_profile`、`company_person`、`asset_device`、`phone_asset`、`wecom_account`、`wechat_account`、`douyin_account`、`domain_account`、`domain_asset`、`merchant` 和 `system_user` 这 11 张空表。每张表 MUST 使用 InnoDB、`utf8mb4` 与 `utf8mb4_unicode_ci`，并包含表注释。

#### Scenario: 已授权的全新测试库建表
- **WHEN** 人工已确认目标库是 `xyw_data_test` 且 11 张目标表均不存在
- **THEN** 建表脚本仅创建这 11 张表及其定义的索引，不创建业务数据、外键、检查约束、触发器或存储过程

#### Scenario: 不完整或已存在的目标表集合
- **WHEN** 预检发现至少一张目标表已存在，或目标库中只存在部分目标表
- **THEN** 操作 MUST 停止，且不得使用 `IF NOT EXISTS`、自动补表、删除或重建来掩盖该异常状态

### Requirement: 通用审计与软删除字段
每张一期表 MUST 包含 `id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT` 主键、`create_time DATETIME NULL`、`update_time DATETIME NULL` 和 `delete_time BIGINT NOT NULL DEFAULT 0`。`delete_time = 0` MUST 表示有效记录；后续应用软删除时 MUST 写入 Unix 毫秒时间戳。

#### Scenario: 验证统一通用列
- **WHEN** 对任意一期表执行结构验收
- **THEN** 验收结果必须显示该表有 `id`、`create_time`、`update_time`、`delete_time`，且 `delete_time` 不可空并默认值为 `0`

#### Scenario: 业务唯一值在软删除后重建
- **WHEN** `company_profile.company_name`、`asset_device.device_name`、`phone_asset.phone_number`、`domain_account.account_identifier`、`merchant.merchant_number` 或 `system_user.username` 的旧记录已被软删除
- **THEN** 相同业务值可创建新的有效记录，并由“业务字段 + delete_time”复合唯一索引阻止两条有效记录并存

### Requirement: 一期字段与索引契约
系统 SHALL 按设计文档的 11 表字段字典创建业务列、主键、复合唯一索引和查询索引。逻辑关联字段 MUST 保存为 `*_id` 的 `BIGINT UNSIGNED` 列，但数据库 MUST NOT 定义 `FOREIGN KEY`、`REFERENCES` 或 `CHECK`。

#### Scenario: 验证手机号资产关联快照
- **WHEN** 验收 `phone_asset` 的结构
- **THEN** 必须存在手机号、卡/实名/设备字段、五个 `JSON` 关联快照字段、`relation_synced_at`、手机号有效记录复合唯一索引，以及卡类型、ICCID、设备查询索引

#### Scenario: 验证账号表的重复策略
- **WHEN** 验收 `wecom_account`、`wechat_account` 和 `douyin_account`
- **THEN** 三张表必须具有设计规定的业务列和查询索引，且不得为账号标识创建一期业务唯一索引

### Requirement: 受控 SQL 交付与结构验收
系统 SHALL 将本期 SQL 交付为只读预检脚本、人工建表脚本和只读结构验收脚本。每个脚本 MUST 在开头以中文说明作用、关联文件、执行顺序、允许目标库、禁止行为和失败停止条件；建表后 MUST 产出执行记录。

#### Scenario: 非目标库预检
- **WHEN** 预检显示当前数据库不是 `xyw_data_test`
- **THEN** 执行人必须停止，且不得执行建表脚本

#### Scenario: 结构验收通过
- **WHEN** 建表脚本执行结束且结构验收核对了表、列、主键、唯一/查询索引与禁止约束
- **THEN** 只有全部匹配时才可记录 PASS 并进入后续新后端接入；否则必须记录 FAIL 与实际结构后停止
