先说一个核心观点:写数据库建表需求这件事,越早结构化输入,后面对接开发的返工就越少。你可能会发现,自己明明把需求描述得挺清楚,可ChatGPT一上手,字段名直接就变成了user_name、user_age、is_active——看着合理,但脱离了你真实的业务语境。结果是开发拿到手反复改,整个表结构越修越偏。

要从根上解决这个问题,核心思路其实很简单,就是抓住业务实体和动词,然后用一套结构化的约束去引导模型。
先锁定业务实体和核心动词
拿一份原始需求文档出来,用荧光笔把文档里所有带“的”的短语都圈出来——比如“用户的收货地址”“订单的支付状态”“商品的库存预警阈值”。这些既是【核心实体】,也是建表时字段命名的来源。接着再找出所有动作类词,比如“下单”“核销”“冻结”“续费”,这些动词直接决定了某个字段该设计成状态位还是操作时间戳。
这步跳过去了,后续所有字段都会漂在半空——ChatGPT手里没有业务上下文,只能按通用模板硬套。后面再怎么优化提示词,也补不回这个起点。
用三列约束法喂给模型
把每个字段拆成「业务含义|数据类型|约束条件」三列,用竖线分隔,每行一个字段,不加任何多余说明。比如:
用户手机号|VARCHAR(11)|NOT NULL UNIQUE INDEX
会员等级|TINYINT|DEFAULT 0 CHECK (value BETWEEN 0 AND 5)
最后登录IP|INET6|NULL
注意,这里直接粘贴三列表格给模型,不要写“请根据以下要求生成建表SQL”。模型对结构化输入的响应精度比自然语言高3倍以上,【CHECK声明、INDEX声明一旦漏掉,后期加索引锁表几小时就是代价】。
强制指定字段命名风格
方式一:前缀统一。直接在提示词开头加一句:“所有字段名必须以业务模块缩写开头,用户模块用usr_,订单模块用ord_,商品模块用itm_,禁止出现user_id、order_time这类无前缀字段。”
方式二:拒绝拼音+下划线组合。追加指令:“字段名中禁止出现拼音缩写(如‘shouhuo’)、禁止连续两个下划线、禁止数字结尾(如‘status_1’)。”
方式三:绑定领域词典。提供5个你系统里已有的字段名作为锚点,比如“参考已有字段:usr_auth_token、ord_actual_amount、itm_sku_code、pay_channel_code、log_create_time”。模型会自动对齐命名惯性,这才是防止顺拐最猛的药剂。
让字段顺序反映读写频次
顺序不是摆设。实际操作分四步:
第一步:高频查询字段(主键、常WHERE条件字段、JOIN字段)放在最前面。
第二步:大字段(TEXT、JSON、BLOB)挪到末尾。
第三步:默认值为NULL且极少被更新的字段(比如remark、ext_info)塞在倒数第二位。
第四步:检查CREATE TABLE语句中的字段顺序是否符合上述排列,不符合就要重写提示词,直接强调“字段顺序即执行顺序,不可调整”。
要知道MySQL 8.0+对字段顺序敏感,ALTER TABLE ADD COLUMN只要插到中间位置,就会触发全表拷贝。这一步定死,能帮你避开90%的线上DDL事故。
