Commit e4cb883e98b957f431092be6cd559f1a4101994d

Authored by zichun
1 parent 9b8f6a2d

db-design-gen: fix 5 standard columns in docs/03 templates; drop docs/04 § 四 + A…

…0 convention machinery

- schema 约定(iIncrement 主键 / sId 业务ID / sBrandsId+sSubsidiaryId 多租户 / tCreateDate / 匈牙利前缀)从「A0 询问 + 可配置 {{}} 占位 + docs/04 § 四」改为**固定写死**在 docs-03-header-template + docs-03-table-template
- remove A0 step(约定固定,无需向用户确认);B 内联引用固定标准列(去掉指向尚未生成的 docs/03 的前向引用);C.1/C.2 去掉 {{PK_CONVENTION}}/{{TENANT_COLS}}/{{COL_PREFIX_RULE}} 填充/展开
- docs/04 § 四 不再被任何环节创建或引用(schema 约定单一来源 = docs/03)
skills/plan/db-design-gen/SKILL.md
@@ -13,18 +13,6 @@ allowed-tools: Read Write Edit Grep Glob AskUserQuestion @@ -13,18 +13,6 @@ allowed-tools: Read Write Edit Grep Glob AskUserQuestion
13 13
14 ## 执行步骤 14 ## 执行步骤
15 15
16 -### 步骤 A0:确认 ERP schema 约定(一次性)  
17 -  
18 -先 `Grep` `docs/04-技术规范.md § 四 数据库 schema 约定`。已存在则读取后直接进入步骤 A;缺失则按下表默认值,逐项问用户是否覆盖:  
19 -  
20 -| 键 | 默认值(ERP 沿用) |  
21 -|---|---|  
22 -| `PK_CONVENTION` | `iIncrement` int 主键 + `sId` varchar(100) 业务 ID |  
23 -| `TENANT_COLS` | `sBrandsId` varchar(100) + `sSubsidiaryId` varchar(100),默认值 `1111111111`(无多租户则填「无」) |  
24 -| `COL_PREFIX_RULE` | 匈牙利前缀 `i`=int / `s`=varchar / `t`=datetime(无前缀则填「无前缀」) |  
25 -  
26 -如 `docs/04 § 四` 缺失,用 `AskUserQuestion` 一次性收三项覆盖(默认即沿用上表),然后 `Edit` 追加 `docs/04 § 四` + 在 `CLAUDE.md`「Schema 演化规约」末尾追加「数据库 schema 约定(A3 确认)」一段引用 `docs/04 § 四`。后续 B/C 步骤一律引用确认后的值。  
27 -  
28 ### A. 读取设计输入 16 ### A. 读取设计输入
29 17
30 读: 18 读:
@@ -37,18 +25,18 @@ allowed-tools: Read Write Edit Grep Glob AskUserQuestion @@ -37,18 +25,18 @@ allowed-tools: Read Write Edit Grep Glob AskUserQuestion
37 25
38 基于步骤 A 读到的 REQ + 命名规范,**正向推导**业务实体 → 表 + 字段 + 索引 + 外键。要求: 26 基于步骤 A 读到的 REQ + 命名规范,**正向推导**业务实体 → 表 + 字段 + 索引 + 外键。要求:
39 27
40 -1. 严格套用 `docs/04` 的命名规范 + 步骤 A0 确认的 `COL_PREFIX_RULE` 列命名前缀规则  
41 -2. **主键**:套用步骤 A0 确认的 `PK_CONVENTION`。REQ 明确要求与确认约定不同的主键(复合主键 / UUID / 业务主键)时按 REQ,并在该表业务注记里注明偏离原因 28 +1. 严格套用 `docs/04` 命名规范 + 匈牙利列前缀(`i`=int / `s`=varchar / `t`=datetime)
  29 +2. **主键**:标准列 `iIncrement` int 主键。REQ 明确要求不同主键(复合主键 / UUID / 业务主键)时按 REQ,并在该表业务注记里注明偏离原因
42 3. **外键**:依据 REQ 中的引用关系(如「订单引用客户」),明确列出 `ON DELETE` / `ON UPDATE` 策略;不能确定时默认 `RESTRICT` 30 3. **外键**:依据 REQ 中的引用关系(如「订单引用客户」),明确列出 `ON DELETE` / `ON UPDATE` 策略;不能确定时默认 `RESTRICT`
43 -4. **索引**:根据 REQ 的查询模式推导业务索引;外键列默认建索引;步骤 A0 确认的 `TENANT_COLS` 租户隔离列(若非「无」),按业务查询模式建组合索引 31 +4. **索引**:根据 REQ 的查询模式推导业务索引;外键列默认建索引;租户隔离列 `sBrandsId` / `sSubsidiaryId`(标准列)按业务查询模式建组合索引
44 5. **业务注记**:对每张表用一两句话说明业务用途、关键约束、与其他表的关系 32 5. **业务注记**:对每张表用一两句话说明业务用途、关键约束、与其他表的关系
45 33
46 如果某 REQ 表述模糊以致无法推断关键 schema 细节(如:枚举值范围 / 字段长度上限 / 必填性),先按合理默认推导并在该字段「业务含义」列加 `【人工填写:需用户审阅】` 标注,待步骤 E 用户审阅时调整;**不打断本次推导**。 34 如果某 REQ 表述模糊以致无法推断关键 schema 细节(如:枚举值范围 / 字段长度上限 / 必填性),先按合理默认推导并在该字段「业务含义」列加 `【人工填写:需用户审阅】` 标注,待步骤 E 用户审阅时调整;**不打断本次推导**。
47 35
48 ### C. 渲染 docs/03 36 ### C. 渲染 docs/03
49 37
50 -1. 读取 `${CLAUDE_SKILL_DIR}/templates/docs-03-header-template.md`,填充 `schema_name`(从 `config-vars.yaml` 读 `database.schema`,无则填 `【人工填写:database.schema】`)、`er_overview`(纯文本 ER 概览),以及步骤 A0 确认的 `{{PK_CONVENTION}}` / `{{TENANT_COLS}}` / `{{COL_PREFIX_RULE}}`。  
51 -2. 渲染「表清单」:对每张表:读取并填充 `${CLAUDE_SKILL_DIR}/templates/docs-03-table-template.md`,其中标准列区块用步骤 A0 确认的 `{{PK_CONVENTION}}` / `{{TENANT_COLS}}` 展开(`TENANT_COLS` = 「无」时不输出租户列行)。 38 +1. 读取 `${CLAUDE_SKILL_DIR}/templates/docs-03-header-template.md`,填充 `schema_name`(从 `config-vars.yaml` 读 `database.schema`,无则填 `【人工填写:database.schema】`)、`er_overview`(纯文本 ER 概览)。「项目标准列约定」是固定 5 列,无占位、原样保留。
  39 +2. 渲染「表清单」:对每张表读取并填充 `${CLAUDE_SKILL_DIR}/templates/docs-03-table-template.md`——标准列 5 行已内置原样输出,只需填业务字段(`{{#each columns}}`)/ 索引 / 外键 / 业务注记。
52 3. 写入 `docs/03-数据库设计文档.md`。 40 3. 写入 `docs/03-数据库设计文档.md`。
53 41
54 勾选:` - [ ] docs/03-数据库设计文档.md 已生成` 42 勾选:` - [ ] docs/03-数据库设计文档.md 已生成`
skills/plan/db-design-gen/templates/docs-03-header-template.md
@@ -6,12 +6,15 @@ @@ -6,12 +6,15 @@
6 6
7 ## 项目标准列约定 7 ## 项目标准列约定
8 8
9 -本项目数据库约定确认值见 `docs/04-技术规范.md § 四、数据库 schema 约定`。下列四项展开见每张业务表的字段清单:  
10 -  
11 -- **列命名前缀规则**:{{COL_PREFIX_RULE}}  
12 -- **主键约定**:{{PK_CONVENTION}}  
13 -- **租户隔离列**:{{TENANT_COLS}}  
14 -- **创建时间列**:`tCreateDate` (datetime, 默认当前时间) 9 +下文每张业务表的字段清单都自动包含以下 5 个标准列(匈牙利前缀 `i` int / `s` varchar / `t` datetime)。渲染时由 `docs-03-table-template.md` 模板内置原样输出。
  10 +
  11 +| 列名 | 类型 | 可空 | 主键 | 说明 |
  12 +|---|---|---|---|---|
  13 +| `iIncrement` | int | 否 | 是 | 整数主键 ID(自增方式由实现决定:DB `AUTO_INCREMENT` 或应用 / 触发器分配) |
  14 +| `sId` | varchar(100) | 是 | — | 业务 ID(对外暴露的字符串标识,如 UUID / 人类可读编号) |
  15 +| `sBrandsId` | varchar(100) | 是 | — | 品牌 ID(多租户隔离) |
  16 +| `sSubsidiaryId` | varchar(100) | 是 | — | 子公司 ID(组织层级隔离) |
  17 +| `tCreateDate` | datetime | 否 | — | 记录创建时间 |
15 18
16 字典 / 辅助表如有豁免,在该表业务注记里注明豁免原因。 19 字典 / 辅助表如有豁免,在该表业务注记里注明豁免原因。
17 20
skills/plan/db-design-gen/templates/docs-03-table-template.md
@@ -4,8 +4,10 @@ @@ -4,8 +4,10 @@
4 4
5 | 字段 | 类型 | Nullable | 默认 | 业务含义 | 5 | 字段 | 类型 | Nullable | 默认 | 业务含义 |
6 |---|---|---|---|---| 6 |---|---|---|---|---|
7 -{{PK_CONVENTION}}  
8 -{{TENANT_COLS}} 7 +| `iIncrement` | int | 否 | — | 整数主键 ID(标准列) |
  8 +| `sId` | varchar(100) | 是 | — | 业务 ID(标准列) |
  9 +| `sBrandsId` | varchar(100) | 是 | `1111111111` | 品牌 ID,多租户隔离(标准列) |
  10 +| `sSubsidiaryId` | varchar(100) | 是 | `1111111111` | 子公司 ID,组织层级隔离(标准列) |
9 | `tCreateDate` | datetime | 否 | 当前时间 | 创建时间(标准列) | 11 | `tCreateDate` | datetime | 否 | 当前时间 | 创建时间(标准列) |
10 {{#each columns}} 12 {{#each columns}}
11 | {{name}} | {{type}} | {{nullable}} | {{default}} | {{business_meaning}} | 13 | {{name}} | {{type}} | {{nullable}} | {{default}} | {{business_meaning}} |