先说一个大家都会遇到的场景。你明明只需要一段能直接执行的DDL,结果模型吐出来一堆分析报告——解释设计原理、堆砌通用范式、补充不存在的业务背景、插入建议性语句,甚至擅自加上索引优化或分库分表的设想。这些发散内容让最终的交付物根本没法直接交给DBA去执行。
其实,要让模型精准输出你想要的,关键就在于把约束条件写得足够“硬”。
锁定DDL交付物形态
有没有什么办法让它乖乖听话?有。关键在于提示词怎么设计。在提示词的开头,直接一上来就写清楚:【输出必须是一段可直接执行的CREATE TABLE语句,不含注释、不含说明文字、不含ALTER语句、不含示例数据INSERT】。这句话就是给模型划定的“雷池”,明确告诉它:超出这个框的内容,我不需要。
紧接着,用分号隔开,把真实的约束条件一股脑儿写上去:;字段名与类型必须严格匹配采购系统现有BASE_MATERIAL_CATEGORY表结构;所有VARCHAR长度值取自Excel第145–156行对应列的实际最大字节数。分号在这里起到“硬分割”的作用,让模型没法忽略。
关键就在这里——那些“建议”、“可考虑”、“通常应”之类的引导性短语,一定要禁用。模型只要看到这类词,就会自动启动“补充模式”,用它那套通用解释逻辑填充内容,然后你的交付物里就混进了一堆非DDL文本。干干净净的DDL,需要从词汇层面就把源头掐断。
字段级白名单控制
这一步的核心,是让模型在字段定义层面也失去“发挥”的空间。有两种实操方法。
第一种方法,显式地把所有32个字段名及类型,按DDL中间出现顺序逐行写出来。比如:“ID VARCHAR(64) NOT NULL”→“PURCHASE_CATEGORY_ID VARCHAR(64)”→……→“DEL_FLAG TINYINT DEFAULT 1 NOT NULL”。这是一种“用实例说话”的办法,不给模型任何想象空间,它只能照猫画虎。
第二种方法更巧妙,用“仅允许出现以下关键词”这个短语,把能用的语法元素钉死。【VARCHAR、TIMESTAMP、TINYINT、NOT NULL、DEFAULT、COMMENT ON COLUMN】——就这六个,多一个都不要。这样一来,模型就彻底失去了“发散”的空间。比如看到“PRIMARY KEY”,它可能会自行补全“USING BTREE”或“CLUSTERED”,而你的目标表明确要求STORAGE(CLUSTERBTR),多一个词就破坏执行一致性。用白名单的方式,一步就解决这个问题,一步都不能省。
分阶段注入真实DDL片段
最后一步,也是最体现功力的地方——分阶段、有逻辑地把真实的DDL结构信息喂给模型。
第一步,先把你已经知道的结构片段喂给模型。“已存在表BASE_MATERIAL_CATEGORY含字段:ID、CODE、NAME、PARENT_ID、LEVEL、SORT_ORDER、IS_LEAF、CREATE_TIME、CREATE_BY、UPDATE_TIME、UPDATE_BY、DEL_FLAG。”这相当于给模型画了一个“已知域”,它接下来的输出必须贴合这个框架。
第二步,追加映射表的核心字段要求。“新增表BIZ_MATERIAL_CATEGORY_MAPPING需承载采购四级分类与营销三级分类的双向映射关系,字段必须包含PURCHASE_LEVEL_ONE_CODE至PURCHASE_LEVEL_FOUR_NAME共8个采购侧字段,以及MARKETING_LEVEL_ONE_CODE至MARKETING_LEVEL_THREE_NAME共6个营销侧字段。”这一步直接把字段的定义范围锁定在你想要的那个集合里。
第三步,也是最硬的一步——绑定DDL硬约束。“主键为ID字段;DEL_FLAG默认值为1且NOT NULL;所有TIMESTAMP字段精度为(6);COMMENT内容必须与字段实际用途完全一致,如‘采购系统物料分类ID,关联BASE_MATERIAL_CATEGORY.ID’。”用这种“不容商量”的句式,告诉模型:这就是规则,没有商量的余地。这样一来,它输出的DDL,就是一份可以直接交给DBA执行、一个标点都不用改的标准交付物。
