# 业务表 SQL 规范 ## 适用范围 - 当任务是新增/修改 `.ai-specs/doc-sql/*.md` 时,先读本文件。 - 当前项目关系型数据库默认是 `PostgreSQL`,`doc-sql` 的 `建议 SQL` 默认输出 `PostgreSQL` 写法。 - 涉及状态、类型、级别、来源、模式、分类等值域字段时,必须先读 `.ai-specs/sys-specs/business-dictionary-spec.md`,并先补 `.ai-specs/doc-dict/.md`。 ## 强制输出 - 文档路径固定:`.ai-specs/doc-sql/.md` - 文档结构固定只保留:`# 标题`、`## 基本信息`、`## 建议 SQL` - `## 基本信息` 固定顺序:`模块` → `表名` → `模型` → `迁移接入` → 按需补 `字典` 行 → `职责` - 有字典字段时,每个字典单独占一行:`- <字段中文名>字典:\`\`` - `## 建议 SQL` 前的说明固定写为:`> 以下 SQL 以当前项目 PostgreSQL 为准,主要表达字段、约束和索引语义;实际落库以 \`GORM Model\` 和 \`initialize/gorm_biz.go\` 为准。` - `SQL` 代码块固定按这个顺序组织:`CREATE TABLE` → `COMMENT ON TABLE` → `COMMENT ON COLUMN` → `CREATE UNIQUE INDEX` / `CREATE INDEX` - 表名、字段名、索引名统一使用 `snake_case` - 唯一索引命名固定:`uk__` - 普通索引命名固定:`idx__` - 字典字段只存字典项 `Value`,禁止存 `Label` - 文档只写已确认字段、约束、索引;禁止再补 `字段设计`、`索引设计`、`关联关系`、`删除与兼容`、`自检` 等重复章节 ## PostgreSQL 写法 - 主键自增优先写 `bigserial PRIMARY KEY` - 时间字段优先写 `timestamp with time zone` - 注释统一写 `COMMENT ON TABLE`、`COMMENT ON COLUMN` - 索引统一单独写 `CREATE UNIQUE INDEX`、`CREATE INDEX` - 禁止混入 `AUTO_INCREMENT`、反引号、`ENGINE=InnoDB`、行内 `COMMENT`、`UNIQUE KEY`、`KEY ...` 等 `MySQL` 方言 ## 输出模板 ````md # <表中文名> ## 基本信息 - 模块: - 表名:`` - 模型:`model//.go` - 迁移接入:`initialize/gorm_biz.go` - <字段中文名>字典:`` - 职责:<一句话职责> ## 建议 SQL > 以下 SQL 以当前项目 PostgreSQL 为准,主要表达字段、约束和索引语义;实际落库以 `GORM Model` 和 `initialize/gorm_biz.go` 为准。 ```sql CREATE TABLE ( id bigserial PRIMARY KEY, created_at timestamp with time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at timestamp with time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, , ); COMMENT ON TABLE IS '<表中文名>'; COMMENT ON COLUMN .id IS '主键'; COMMENT ON COLUMN .created_at IS '创建时间'; COMMENT ON COLUMN .updated_at IS '更新时间'; COMMENT ON COLUMN . IS '<字段说明>'; COMMENT ON COLUMN . IS '<字段说明>'; CREATE UNIQUE INDEX uk__ ON (); CREATE INDEX idx__ ON (); ``` ```` - 没有字典字段,就删除对应“字典”行 - 没有唯一索引或普通索引,就删除对应 SQL 行 - 如果字段默认值来自字典,直接写字典项 `Value`,例如 `DEFAULT 'enabled'` ## 复刻目标 - 只看本文件,应能直接写出类似 `.ai-specs/doc-sql/book_author.md` 的文档 - 先定字典,再写 `doc-sql`,再进入 `Model`、迁移和业务代码