# Schema 变更记录 > **用途**:记录在初始 Model 创建之后新增/修改的字段,供架构师逐一更新 Migration 脚本。 > **格式**:每条变更含目标表、变更类型、字段定义、变更原因、来源 PRD 依据。 > **状态流转**:`待迁移` → `已迁移`(架构师完成 migration 后更新状态) --- ## 变更清单 | # | 状态 | 目标表 | 变更类型 | 字段名 | 提出日期 | |---|------|--------|----------|--------|----------| | 1 | 待迁移 | `public.tenants` | 新增字段 | `tenant_code` | 2026-04-30 | | 2 | 待迁移 | `public.tenants` | 新增字段 | `contact_phone` | 2026-04-30 | | 3 | 待迁移 | `public.tenants` | 字段修改 | `contact_email`(NOT NULL → 可 NULL) | 2026-04-30 | --- ## 变更详情 ### #1 — `public.tenants` 新增 `tenant_code` **状态**:待迁移 **提出日期**:2026-04-30 **目标表**:`public.tenants`(Public Schema,django-tenants 主租户表) **字段定义**: ```sql tenant_code CHAR(12) UNIQUE NOT NULL ``` **注释**:对外暴露的 12 位纯数字识别码,如 `202500010001`;用户首次登录客户端时输入;由平台运营在注册租户时生成;创建后不可修改。 **推荐加在**:`schema_name` 字段之后,`name` 字段之前。 **约束要求**: - `CHAR(12)`:固定 12 位 - `UNIQUE`:全局唯一 - `NOT NULL`:注册时必填 - 禁止 `UPDATE`(应用层 + DB 层双重约束,与 `schema_name` 同等级别) **建议索引**: ```sql CREATE UNIQUE INDEX idx_tenants_tenant_code ON public.tenants(tenant_code); ``` **变更原因**: 登录 PRD §5.1.3 明确用户输入 12 位 Tenant Code 完成租户识别,服务端需通过该码查找对应 `schema_name`,原始 `public.tenants` 表中缺少此字段。 **PRD 依据**: `PRD/登录管理/用户登录管理模块PRD.md` §5.1.3 — Tenant Code 格式规范: > 格式:固定 12 位纯数字,如 `202500010001` **登录查询示例**: ```sql SELECT schema_name, name FROM public.tenants WHERE tenant_code = '202500010001' AND status = 'active'; ``` --- ### #2 — `public.tenants` 新增 `contact_phone` **状态**:待迁移 **提出日期**:2026-04-30 **目标表**:`public.tenants`(Public Schema) **字段定义**: ```sql contact_phone CHAR(11) NOT NULL ``` **注释**:联系人手机号(11位纯数字);系统开通租户时自动以此手机号创建 Tenant Admin 登录账号;必填字段,平台运营在创建租户时录入。 **推荐加在**:`contact_name` 字段之后,`contact_email` 字段之前。 **约束要求**: - `CHAR(11)`:固定 11 位手机号 - `NOT NULL`:开通租户时必填 **变更原因**: 登录 PRD v1.5 决策:Tenant Admin 账号统一以联系人手机号作为用户名,与普通员工账号规则对齐。需在 tenants 表增加手机号字段作为 Tenant Admin 账号创建的数据来源。 **PRD 依据**: `PRD/登录管理/用户登录管理模块PRD.md` §5.3.2 Tenant Admin 账号规格表 --- ### #3 — `public.tenants.contact_email` 改为可 NULL **状态**:待迁移 **提出日期**:2026-04-30 **目标表**:`public.tenants`(Public Schema) **变更 SQL**: ```sql ALTER TABLE public.tenants ALTER COLUMN contact_email DROP NOT NULL; ``` **变更原因**: `contact_email` 原为 `NOT NULL`。由于 Tenant Admin 账号创建数据来源改为 `contact_phone`(手机号,必填),邮箱降级为选填,仅用于找回密码功能。为空时 Tenant Admin 无法自助找回密码,需联系平台运营处理。 **PRD 依据**: `PRD/登录管理/用户登录管理模块PRD.md` §5.3.2 --- *后续如有新增字段,按同样格式追加到本文件。*