注释补全
This commit is contained in:
320
Project/fonrey/规范/DATA_MODEL_注释补全规范_v1.md
Normal file
320
Project/fonrey/规范/DATA_MODEL_注释补全规范_v1.md
Normal file
@@ -0,0 +1,320 @@
|
||||
# DATA_MODEL 注释补全规范 v1.0
|
||||
|
||||
> **作者**: Backend Engineer
|
||||
> **日期**: 2026-04-29
|
||||
> **目标读者**: 产品经理 / 数据模型维护者
|
||||
> **目的**: 统一 `/DATA_MODEL/*.md` 中所有字段的中文注释格式与覆盖度,使其能机械化同步到 Django 模型代码与 OpenAPI 文档
|
||||
|
||||
---
|
||||
|
||||
## 一、背景
|
||||
|
||||
当前 Django 项目骨架已搭建完成(74 个模型 / 781 个字段),但模型代码中**几乎没有任何中文字段说明**:
|
||||
|
||||
| 维度 | 现状 |
|
||||
|---|---|
|
||||
| `verbose_name="中文名"`(字段中文名) | 0 / 781 |
|
||||
| `help_text="..."`(字段详细说明) | 14 / 781 |
|
||||
| `Meta.verbose_name`(模型中文名) | 0 / 74 |
|
||||
| 模型类中文 docstring | 0 / 74 |
|
||||
|
||||
代码侧无法凭空生成业务语义,必须**以 DATA_MODEL 为唯一权威源**,由产品经理补全后,由开发同步到代码。
|
||||
|
||||
DATA_MODEL 现有的业务字段注释覆盖率约 **70%**——大量业务字段已有清晰的中文说明(这是本规范的范本),缺口集中在**技术元数据字段**和少数边角字段。本规范定义补全标准。
|
||||
|
||||
---
|
||||
|
||||
## 二、规范总览
|
||||
|
||||
### 2.1 必须补全的字段范围
|
||||
|
||||
每个表的 **每一个字段** 都必须有中文注释,包括:
|
||||
|
||||
- ✅ 业务字段(property.name / client.phone 等)— 大多已有
|
||||
- ✅ 状态枚举字段(status / type / level 等)— 大多已有
|
||||
- ✅ 外键字段(complex_id / staff_id 等)— 部分缺失
|
||||
- ⚠️ **技术元数据字段(重点缺口)**:
|
||||
- `id` / `uuid` — 主键
|
||||
- `created_at` / `updated_at` / `deleted_at` — 时间戳
|
||||
- `created_by` / `updated_by` — 操作人
|
||||
- `version` — 乐观锁版本号
|
||||
- `search_vector` — 全文检索向量
|
||||
- `*_hash` — 加密字段配套哈希
|
||||
- `*_enc` — 加密字段密文
|
||||
- `sort_order` — 排序权重
|
||||
|
||||
### 2.2 表级别也需补全
|
||||
|
||||
每张表必须有:
|
||||
|
||||
- **表名中文标题**(已有,无需改)
|
||||
- **业务摘要**(1-2 句话说明该表的业务作用,已有大部分)
|
||||
- **关键业务规则**(如"不可删除"、"按月分区"等,已有大部分)
|
||||
|
||||
---
|
||||
|
||||
## 三、字段注释格式(统一模板)
|
||||
|
||||
### 3.1 标准 Markdown 表格格式
|
||||
|
||||
DATA_MODEL 现有格式已经很好,**继续沿用**:
|
||||
|
||||
```markdown
|
||||
| 字段 | 类型 | 约束 | 默认 | 业务说明 |
|
||||
|------|------|------|------|----------|
|
||||
| id | UUID | PK | gen_random_uuid() | 主键(系统生成,业务无关) |
|
||||
| name | varchar(100) | NOT NULL | - | 房源名称(如"翠湖天地 3 号楼 1502 室",展示给客户) |
|
||||
| status | varchar(20) | NOT NULL | 'for_sale' | 房源状态:for_sale=在售 / sold=已成交 / off_market=下架(详见 ENUMS.md) |
|
||||
```
|
||||
|
||||
**关键要求**:
|
||||
|
||||
1. **每行的"业务说明"列必须填写**,不允许留空或只写 "-"
|
||||
2. **业务说明要包含三类信息**(按重要性):
|
||||
- **是什么**(必填):如"房源名称"、"主键"
|
||||
- **示例值**(推荐):如"如'翠湖天地 3 号楼 1502 室'"
|
||||
- **业务规则**(按需):如"展示给客户"、"系统生成"、"不可修改"
|
||||
|
||||
### 3.2 SQL DDL 内联注释(DDL 块也要写)
|
||||
|
||||
DATA_MODEL 中的 SQL DDL 块也必须有中文 `-- 注释`:
|
||||
|
||||
```sql
|
||||
CREATE TABLE properties (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(), -- 主键(系统生成)
|
||||
name VARCHAR(100) NOT NULL, -- 房源名称
|
||||
status VARCHAR(20) NOT NULL DEFAULT 'for_sale', -- 房源状态(详见 ENUMS)
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), -- 记录创建时间(系统自动)
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), -- 记录最后更新时间(系统自动)
|
||||
deleted_at TIMESTAMPTZ, -- 软删除时间戳;NULL=未删除
|
||||
created_by UUID REFERENCES staff(id), -- 创建人(FK 到员工表)
|
||||
updated_by UUID REFERENCES staff(id), -- 最后修改人
|
||||
version INTEGER NOT NULL DEFAULT 1 -- 乐观锁版本号(每次更新 +1)
|
||||
);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 四、技术元数据字段标准注释库
|
||||
|
||||
**这是本规范的核心交付物**——所有表的元数据字段使用统一中文注释,PM 不必逐个想,开发也能机械化套用。
|
||||
|
||||
### 4.1 通用元数据字段(每张表都要)
|
||||
|
||||
| 字段名 | 类型 | 标准中文注释 |
|
||||
|---|---|---|
|
||||
| `id` | UUID / BIGINT | 主键(系统生成,业务无关) |
|
||||
| `created_at` | TIMESTAMPTZ | 记录创建时间(系统自动) |
|
||||
| `updated_at` | TIMESTAMPTZ | 记录最后更新时间(系统自动) |
|
||||
| `deleted_at` | TIMESTAMPTZ NULL | 软删除时间戳;NULL=未删除,非 NULL=已软删除 |
|
||||
| `created_by` | FK → staff/account | 创建人(操作员工) |
|
||||
| `updated_by` | FK → staff/account | 最后修改人(操作员工) |
|
||||
| `version` | INTEGER | 乐观锁版本号(每次更新 +1,用于并发冲突检测) |
|
||||
|
||||
### 4.2 加密字段配套(涉及手机号/身份证等敏感数据)
|
||||
|
||||
| 字段名 | 类型 | 标准中文注释 |
|
||||
|---|---|---|
|
||||
| `phone_enc` | BYTEA | 手机号密文(AES-256-GCM 加密,不可直接查询) |
|
||||
| `phone_hash` | CHAR(64) | 手机号哈希(SHA-256,用于唯一性约束和精确查询) |
|
||||
| `id_card_enc` | BYTEA | 身份证号密文(AES-256-GCM 加密) |
|
||||
| `id_card_hash` | CHAR(64) | 身份证号哈希(SHA-256) |
|
||||
|
||||
### 4.3 全文检索字段
|
||||
|
||||
| 字段名 | 类型 | 标准中文注释 |
|
||||
|---|---|---|
|
||||
| `search_vector` | TSVECTOR | 全文检索向量(由触发器或 Celery 自动维护) |
|
||||
|
||||
### 4.4 排序与状态字段
|
||||
|
||||
| 字段名 | 类型 | 标准中文注释 |
|
||||
|---|---|---|
|
||||
| `sort_order` | INTEGER | 排序权重(数值越小越靠前) |
|
||||
| `is_active` | BOOLEAN | 是否启用(true=启用,false=禁用) |
|
||||
| `is_deleted` | BOOLEAN | 是否已删除(与 deleted_at 二选一,按表设计) |
|
||||
|
||||
### 4.5 计分/统计字段(多见于楼盘、房源完成度)
|
||||
|
||||
| 字段名 | 类型 | 标准中文注释 |
|
||||
|---|---|---|
|
||||
| `total_score` | SMALLINT | 总分(0-100;其他 score_* 字段加权汇总) |
|
||||
| `calculated_at` | TIMESTAMPTZ | 上次计算时间(由 Celery 异步任务更新,非实时) |
|
||||
|
||||
---
|
||||
|
||||
## 五、业务字段注释三段式(用于补全缺失项)
|
||||
|
||||
对于业务字段,使用**三段式**结构(用 / 或 ; 分隔):
|
||||
|
||||
```
|
||||
[字段中文名]:[示例值或取值范围];[业务规则或备注]
|
||||
```
|
||||
|
||||
**示例**:
|
||||
|
||||
| 原始(缺失) | 补全后 |
|
||||
|---|---|
|
||||
| `floor` | `所在楼层:1=底层;总楼层不超过 total_floors(CheckConstraint 校验)` |
|
||||
| `built_year` | `建成年份:如 2018;可空(老房源无记录)` |
|
||||
| `is_only_house` | `是否唯一住房:true=唯一/false=非唯一/NULL=未确认;影响交易税费计算` |
|
||||
| `completeness_score` | `房源完整度评分:0-100;由 Celery 异步计算,非实时;前端列表页展示徽章` |
|
||||
| `commission_rate` | `佣金费率:百分比,如 2.5 表示 2.5%;范围 0-10` |
|
||||
| `protection_end_at` | `保护期结束时间:null=永久保护;保护期内禁止其他经纪人接单` |
|
||||
|
||||
---
|
||||
|
||||
## 六、状态/枚举字段注释规范
|
||||
|
||||
枚举字段必须**列出所有可能值的中英对照**:
|
||||
|
||||
```markdown
|
||||
| status | varchar(20) | NOT NULL | 'for_sale' | 房源状态:for_sale=在售 / sold=已成交 / rented=已出租 / off_market=下架 / pending=审核中(详见 ENUMS.md §房源状态) |
|
||||
```
|
||||
|
||||
**规则**:
|
||||
1. 使用 `英文值=中文名` 的对照
|
||||
2. 多个值用 ` / ` 分隔
|
||||
3. 末尾加 `(详见 ENUMS.md §章节名)` 引用枚举权威源
|
||||
4. 默认值如有业务含义需说明(如"新建房源默认 for_sale")
|
||||
|
||||
---
|
||||
|
||||
## 七、外键字段注释规范
|
||||
|
||||
```markdown
|
||||
| complex_id | UUID | FK → complexes.id | NOT NULL | 所属楼盘(关联 complexes 表;房源必须挂在楼盘下) |
|
||||
| seller_agent_id | UUID | FK → staff.id NULL | NULL | 出售经纪人(接单后填写;ON DELETE SET NULL) |
|
||||
| created_by | UUID | FK → staff.id NULL | NULL | 创建人(系统自动从登录会话填写) |
|
||||
```
|
||||
|
||||
**规则**:
|
||||
1. 必须说明**关联表**("关联 X 表")
|
||||
2. 必须说明**业务含义**("所属楼盘"、"出售经纪人",而非只写"complex_id")
|
||||
3. 可空字段说明**何时为空**("接单后填写"、"老数据无此字段")
|
||||
|
||||
---
|
||||
|
||||
## 八、表级别补全要求
|
||||
|
||||
每张表在 DATA_MODEL 中必须有:
|
||||
|
||||
```markdown
|
||||
### 3.X `table_name` — 中文表名
|
||||
|
||||
**业务作用**:[一句话说明这张表存什么、为什么需要]
|
||||
|
||||
**关键业务规则**:
|
||||
- 规则 1(如:手机号必须加密存储)
|
||||
- 规则 2(如:跟进日志不可删除)
|
||||
- 规则 3(如:每月自动分区)
|
||||
|
||||
**字段表**:
|
||||
[标准字段表格]
|
||||
|
||||
**索引说明**:
|
||||
- idx_xxx:[为什么建这个索引,支撑什么查询]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 九、补全工作清单(PM 待办)
|
||||
|
||||
### 9.1 待补全文件清单
|
||||
|
||||
| DATA_MODEL 文件 | 当前覆盖率(业务字段) | 主要缺口 | 优先级 |
|
||||
|---|---|---|---|
|
||||
| DATA_MODEL_PROPERTY.md | ~75% | 技术元数据字段;部分 shop_* 字段说明;保护期字段 | P0 |
|
||||
| DATA_MODEL_CLIENT.md | ~70% | 跟进日志字段;匹配字段;技术元数据 | P0 |
|
||||
| DATA_MODEL_COMPLEX.md | ~80% | 楼栋/单元字段;技术元数据 | P1 |
|
||||
| DATA_MODEL_ORG.md | ~80% | 员工日志字段;技术元数据 | P1 |
|
||||
| DATA_MODEL_LOGIN.md(含 ACCOUNT) | ~70% | 登录尝试/会话字段;技术元数据 | P0 |
|
||||
| DATA_MODEL_PERMISSION.md | ~85% | 权限种子数据字段说明;技术元数据 | P1 |
|
||||
| DATA_MODEL_SETTING.md | ~75% | LookupItem 字段;技术元数据 | P2 |
|
||||
| DATA_MODEL_PUBLIC.md(含 TENANT/RELEASE) | ~70% | tenant/domain/release 字段;技术元数据 | P1 |
|
||||
|
||||
### 9.2 检查清单(PM 自检)
|
||||
|
||||
补完后请逐文件检查:
|
||||
|
||||
- [ ] 每个字段表的"业务说明"列**全部填写**,无空行无 "-"
|
||||
- [ ] 所有技术元数据字段(id/created_at/...)使用 §四 的标准注释
|
||||
- [ ] 所有枚举字段列出全部取值的中英对照
|
||||
- [ ] 所有外键字段说明关联表 + 业务含义
|
||||
- [ ] 每张表有"业务作用"段落
|
||||
- [ ] 每张表有"关键业务规则"段落(即使只有 1 条)
|
||||
- [ ] DDL 块的每行 SQL 都有 `-- 中文注释`
|
||||
|
||||
---
|
||||
|
||||
## 十、补全完成后开发同步流程
|
||||
|
||||
PM 补完后,开发会按以下顺序同步到 Django 代码(无需 PM 介入):
|
||||
|
||||
| 步骤 | 同步目标 | 来源 | 工时估算 |
|
||||
|---|---|---|---|
|
||||
| 1 | `Meta.verbose_name` / `verbose_name_plural` | 表名("### 3.X xxx — 中文表名"中的中文部分) | 30 分钟 |
|
||||
| 2 | 模型类 docstring | 表的"业务作用" + "关键业务规则" | 1 小时 |
|
||||
| 3 | 字段 `verbose_name="..."` | 字段表"业务说明"的第一段 | 3-4 小时 |
|
||||
| 4 | 字段 `help_text="..."`(关键字段) | 字段表"业务说明"的二/三段(示例 + 规则) | 2 小时 |
|
||||
|
||||
**总计开发工时**:约 7-8 小时,分批次按 app commit。
|
||||
|
||||
代码层面这些注释会被以下系统自动消费:
|
||||
- **Django Admin**:列表页/表单页直接显示中文表名和字段名
|
||||
- **drf-spectacular**:生成 OpenAPI 文档时 `verbose_name → title`、`help_text → description`
|
||||
- **Django shell / 报错信息**:使用中文字段名
|
||||
|
||||
---
|
||||
|
||||
## 十一、范例:一张完整规范的表(参考标准)
|
||||
|
||||
参考 `DATA_MODEL_PROPERTY.md` §3.X `properties` 表,补全后应类似:
|
||||
|
||||
```markdown
|
||||
### 3.1 `properties` — 房源主表
|
||||
|
||||
**业务作用**:存储经纪公司管理的所有待售/待租房屋的核心信息,是整个房源管理模块的根表。
|
||||
|
||||
**关键业务规则**:
|
||||
- 软删除:通过 `deleted_at` 标记,绝不物理删除(合规要求)
|
||||
- 楼层校验:`floor <= total_floors`(CheckConstraint)
|
||||
- 完整度异步:`completeness_score` 由 Celery 任务计算,非实时
|
||||
- 全文检索:`search_vector` 由数据库触发器自动维护
|
||||
|
||||
**字段表**:
|
||||
|
||||
| 字段 | 类型 | 约束 | 默认 | 业务说明 |
|
||||
|------|------|------|------|----------|
|
||||
| id | UUID | PK | gen_random_uuid() | 主键(系统生成,业务无关) |
|
||||
| property_type | varchar(30) | NOT NULL | - | 房源类型:apartment=住宅 / villa=别墅 / shop=商铺 / office=写字楼(详见 ENUMS) |
|
||||
| status | varchar(20) | NOT NULL | 'for_sale' | 房源状态:for_sale=在售 / sold=已成交 / rented=已出租 / off_market=下架(详见 ENUMS) |
|
||||
| name | varchar(100) | NOT NULL | - | 房源名称(如"翠湖天地 3 号楼 1502 室",展示给客户) |
|
||||
| complex_id | UUID | FK → complexes.id | NOT NULL | 所属楼盘(房源必须挂在楼盘下) |
|
||||
| floor | smallint | NOT NULL | - | 所在楼层(1=底层;不超过 total_floors) |
|
||||
| total_floors | smallint | NOT NULL | - | 楼栋总层数 |
|
||||
| sale_price | decimal(12,2) | NULL | - | 挂牌售价:单位元;可空(仅出租房源) |
|
||||
| has_elevator | boolean | NULL | - | 是否有电梯:true=有 / false=无 / NULL=未确认 |
|
||||
| seller_agent_id | UUID | FK → staff.id NULL | NULL | 出售经纪人(接单后填写,ON DELETE SET NULL) |
|
||||
| completeness_score | smallint | NOT NULL | 0 | 房源完整度评分:0-100;由 Celery 异步计算,非实时 |
|
||||
| created_at | TIMESTAMPTZ | NOT NULL | NOW() | 记录创建时间(系统自动) |
|
||||
| updated_at | TIMESTAMPTZ | NOT NULL | NOW() | 记录最后更新时间(系统自动) |
|
||||
| deleted_at | TIMESTAMPTZ | NULL | NULL | 软删除时间戳;NULL=未删除 |
|
||||
| created_by | UUID | FK → staff.id NULL | NULL | 创建人(系统自动从登录会话填写) |
|
||||
| version | integer | NOT NULL | 1 | 乐观锁版本号(每次更新 +1) |
|
||||
| search_vector | TSVECTOR | NULL | NULL | 全文检索向量(由触发器自动维护) |
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 十二、变更与维护
|
||||
|
||||
- 本规范由开发与 PM 共同维护
|
||||
- DATA_MODEL 任何新增字段必须遵循本规范
|
||||
- 字段含义变更时,必须同步更新 DATA_MODEL 注释 → 触发开发同步代码注释
|
||||
- 本规范版本变更需 PM + 开发双方确认
|
||||
|
||||
**联系人**:
|
||||
- 规范问题 → Backend Engineer
|
||||
- 业务字段含义 → Product Manager
|
||||
- 枚举权威 → ENUMS.md
|
||||
Reference in New Issue
Block a user