database-ddl-generator
根据数据字典生成或审查多种数据库的建表、约束和注释 SQL;适用于达梦、MySQL、PostgreSQL、Oracle、SQL Server、SQLite、Hive 和 ClickHouse。
SKILL.mddatabase-ddl-generator/SKILL.md
GitHub跨数据库 DDL 生成
目标与边界
根据用户提供的数据字典或既有 DDL,生成可执行、可审查的 .sql 文件。输出必须以用户指定的数据库为准;若未指定,先根据数据字典、现有脚本、连接信息或用户上下文判断,仍无法可靠判断时先询问,而不是生成“通用 SQL”。
本 skill 聚焦建表、字段、主键/唯一键/外键、索引和注释。权限、分区、存储引擎、表空间、分布式参数、触发器和初始化数据只有在数据字典或用户明确要求时才生成。
读取与规范化数据字典
接受 Excel、CSV、Markdown 表格、Word/PDF 中的字段表或结构化文本。先识别每张表的:表名、表注释、字段名、字段注释、逻辑类型、长度/精度/小数位、是否可空、默认值、主键、唯一键、外键、索引和字典顺序。
- 保持数据字典的表顺序和字段顺序;未提供顺序时,保持输入出现顺序。
- 表名、字段名默认转为大写;若目标数据库、数据字典或用户明确要求大小写敏感标识符,保留原样并使用该数据库正确的引用方式。
- 区分默认值和字符串文本:日期函数、数字、
NULL、布尔值等不得错误加引号。 - 遇到不完整类型、缺失长度、歧义主键或冲突约束时,生成“待确认清单”,不得臆造生产约束。
字段映射和交付检查模板见 references/data-dictionary-contract.md。
目标数据库判断
优先级为:用户明确指定 > 连接配置/现有 SQL > 数据字典元信息 > 可识别的方言特征。输出开头必须写明“目标数据库及版本(若已知)”与采用的关键假设。
不要仅根据某个类型名推断数据库;例如 VARCHAR 出现在多种方言中。若需要支持未列出的数据库,先查阅其官方 SQL 文档或要求用户确认版本与兼容模式。
跨数据库 DDL 迁移与兼容修正
当输入是某个源数据库的 DDL,目标是另一种数据库时,先识别源数据库、目标数据库及其版本/兼容模式,再转换;不得仅做关键词替换,也不能假定源 DDL 可直接在目标端执行。
- 解析源 DDL 的表、字段、约束、索引、注释、默认值、分区和方言专属子句;保留源文件和原始对象顺序。
- 生成“源-目标兼容性清单”,逐项记录已自动转换、需人工确认和无法等价转换的内容。
- 按目标方言重建 DDL,并遵循其注释、标识符与对象创建顺序规则。
- 输出迁移后的
.sql,另附兼容性说明;不得把注释、存储引擎、表空间或分区等无效语法原样带入目标数据库。
迁移时至少处理以下差异:
- **标识符:**模式/库名前缀、引用符、大小写折叠、最大长度、保留字和特殊字符;
- **类型:**文本、二进制、精确小数、浮点、日期时间、时区、布尔、大对象与自定义类型;
- **默认值:**当前时间/日期函数、序列函数、布尔字面量、字符串转义与
NULL语义; - 自增主键:
AUTO_INCREMENT、IDENTITY、序列、生成列或 UUID 的目标端实现; - **约束与索引:**命名、唯一/检查/外键约束、索引方法、部分索引、函数索引和创建时机;
- **表级特性:**字符集、排序规则、引擎、表空间、存储参数、分区、集群/分布键和临时表选项;
- **注释:**将源端内联或扩展属性注释改写为目标端可持久保存的方式。
对于无等价实现的特性,保留为带 TODO 的 SQL 注释并写入待确认清单;例如 MySQL 存储引擎、SQL Server 文件组、PostgreSQL 部分索引、Hive 分区语义或目标端不支持的自定义类型。不要为了让脚本“能执行”而静默丢失约束或改变数据语义。
跨库迁移时必须读取 references/ddl-migration.md。
生成顺序
对每张表按数据字典顺序生成:
CREATE TABLE,包含字段及能够内联的约束;- 无法内联或需独立维护的约束、索引;
- 表与字段注释,按照目标方言的规则安排;
- 以空行分隔表,所有语句以分号结束。
除非用户要求,生成前不包含 DROP TABLE。如需重复执行,使用目标数据库支持的安全幂等写法;不能假设各方言都支持 IF NOT EXISTS。
注释和方言规则
生成前必须读取 references/dialect-rules.md。尤其是:
- **达梦(DM):**先完成整条
CREATE TABLE,再使用独立的COMMENT ON TABLE和COMMENT ON COLUMN语句;注释不得夹在建表语句中。 - **Oracle、PostgreSQL:**建表后使用独立
COMMENT ON语句。 - **SQL Server:**建表后使用
sp_addextendedproperty(或在已有属性时使用相应更新逻辑)。 - **MySQL、Hive、ClickHouse:**优先采用各自支持的内联
COMMENT语法。 - **SQLite:**没有标准的持久字段/表注释机制;在 SQL 文件中保留说明性注释,并在交付说明中明确该限制。
类型与兼容性
先保留数据字典中的物理类型;只有逻辑类型需要落地时才映射。映射时区分文本、整数、精确小数、浮点、日期/时间、二进制、布尔和大对象,并特别校验长度、精度、小数位和时区语义。类型映射与高风险差异见 references/dialect-rules.md。
不要把任意 NUMBER、DECIMAL 或 NUMERIC 机械映射为浮点数;金额和精确指标优先使用精确小数类型。未给出长度的文本字段或未给出精度的小数应标记待确认,除非用户已有明确的默认规范。
校验与交付
输出前逐项核验:
- 表、字段和注释数量与数据字典一致;
- 名称大写及引用规则符合目标方言;
- 主键、外键、唯一键、默认值、可空性和索引没有遗漏;
- 注释语句的位置与目标数据库兼容;
- 保留字和特殊字符已处理;
- 生成的 SQL 已按表/字段字典顺序排列。
跨库迁移额外核验:源端对象数量与目标端对象数量、关键字段类型与精度、主键/唯一/外键、索引、默认值和注释均有转换结论;所有无法自动迁移的项均出现在兼容性清单中。
将最终结果保存为描述性 .sql 文件,文件开头写明目标数据库、生成日期、数据字典来源和待确认项。交付时附上简短的兼容性与假设说明。