很多人在Cursor里做数据库设计时,总会遇到一个让人头疼的问题:明明上次对话已经把关键约束说清楚了——字段的业务含义、权限边界、上下游系统怎么对接——结果下一次讨论,AI就跟失忆了一样,把这些核心信息丢得一干二净,给你推荐一堆完全不贴谱的方案。问题出在哪?不是AI不够聪明,是你的指令本身缺少“结构化的锚点”。
今天就集中拆一下这个问题,说说怎么让你的约束条件不再被AI“忽略或覆盖”。
用结构化锚点锁定核心约束
第一步,在提示词开头,用一对【】把那些不容商量的硬性条件框起来。举个例子,如果你的订单系统必须支持分库分表,订单ID必须是字符串类型且全局唯一,下游ERP系统只接受JSON格式推送——那就直接写成:【必须支持分库分表,订单ID为字符串类型且全局唯一,下游ERP系统只接受JSON格式推送】。Cursor会把方括号内的内容识别为高优先级指令,不会参与什么“摘要压缩”,自然就不会被它的记忆清理机制吞掉。
第二步,对容易产生歧义的字段,单独明说它的业务语义。表里有个status字段,你光写“status int”那是远远不够的。正确的写法是:“status tinyint —— 0=待支付, 1=已支付, 2=已退款, 3=已关闭(不可逆状态)”。字段名本身不传递任何状态流转逻辑,你得亲手把这个逻辑注入进去。
第三步,把外部依赖的接口关系标注清楚。在描述表关联的时候,不要只说“v_order_summary.user_id关联user_profile.id”,你要写成:“v_order_summary.user_id → 对接风控系统的user_profile.id(字段长度32位,含前缀‘USR_’)”。不把这个映射关系写清楚,Cursor很可能会按MySQL默认的bigint去推导,后续生成的JOIN条件自然就废了。
保留上下游系统对接细节
方法一:直接复制粘贴API契约的片段。把下游系统要求的JSON Schema或OpenAPI定义中的关键字段搬进来。比方说下游要求这样的格式:{"order_id": {"type": "string", "maxLength": 64}, "amount": {"type": "number", "multipleOf": 0.01}}。这比你写一句“金额精确到分”要牢靠得多,Cursor能据此直接生成带校验的INSERT语句。
方法二:用「→」符号显式地标记数据流向。写清楚:“用户注册事件 → Kafka topic ‘user_signup_v2’ → 实时写入users表的created_at、source_channel字段”。这种箭头链路一出现,Cursor会自动识别出事件驱动的架构约束,就不会再傻乎乎地给你推荐轮询同步方案了。
【禁止用‘类似’‘大概’‘一般’这种模糊的词来描述接口协议——Cursor会按字面意思去概率采样,很可能生成跟你系统完全不兼容的字段类型。】
固化权限与部署环境信息
① 在提示词末尾,固定写一行环境的声明:“部署环境:阿里云RDS MySQL 8.0,最大连接数200,无SUPER权限,无法执行SET GLOBAL。”
② 紧接着写清楚权限的限制:“仅可创建视图和存储过程,禁止CREATE TABLE、ALTER TABLE、GRANT任何权限。”
③ 最后加上一句物理约束:“单表预估峰值5亿行,SSD云盘,IOPS上限3000。”
这三行必须连续出现,不能中间插一句话。Cursor会把它当成一个完整的环境上下文块来处理,后续所有关于索引策略、分区方案的生成,都会基于这个前提展开。这样一来,AI就再也跑不偏了。
