游乐游手机版
首页/AI热点日报/热点详情

MarsCode数据库建表高质量提示词问法有哪些

类型:热点整理2026-07-09
在MarsCode中生成数据库建表语句时,应直接提供完整API文档JSON示例,指定PostgreSQL15 4语法,主键用UUIDv4,文本字段默认NOTNULL,时间字段映射timestamptz,金额强制DECIMAL(12,2),并添加规范命名的索引及pg_stat_statements注释,避免缺主键、类型错误等细节问题。

在MarsCode里写数据库建表提示词,千万别只写“建个用户表”这么简单。直接给出完整的API文档JSON示例,让系统自动生成PostgreSQL 15.4的建表语句——主键用UUIDv4,文本字段默认NOT NULL,时间字段映射成timestamptz,金额强制DECIMAL(12,2),再加上规范命名的显式索引和pg_stat_statements注释。

MarsCode写数据库建表需求提示词有哪些高质量问法

如果你经常在MarsCode里生成建表SQL,应该遇到过这种情况:提示词写得太随意,出来的DDL要么缺主键,要么时间字段用了datetime而不是timestamptz,甚至把tinyint当布尔用。这些看似不起眼的细节,一旦漏掉,上线后很可能引发数据错乱或查询性能雪崩。

用接口契约反推字段定义

几个关键点,能帮你一次就生成可落地的DDL。先从接口契约反推字段定义开始。打开你正在对接的API文档,找到POST /api/v1/users的请求体示例,把整个JSON对象(包括嵌套结构)完整复制下来,直接粘贴到MarsCode搜索框的开头位置。

这里有个容易忽略的细节:不能只复制字段名列表,保留原始JSON的层级、空值标记和示例值至关重要。比如下面这个例子:

{
  "id": "usr_8a2f3c",
  "status": null,
  "created_at": "2026-07-02T09:15:22.123Z"
}

MarsCode会根据null值判断该字段是否允许为空,根据ISO 8601时间格式自动选用timestamptz而不是datetime。这一步做好之后,在JSON后面另起一行,写上:“按PostgreSQL 15.4语法生成CREATE TABLE语句,主键用UUIDv4,所有文本字段加NOT NULL约束,除非原始JSON中明确标为null。”

按业务动作锁定约束条件

方法一:状态流转驱动约束

以用户注册到账号注销这条典型链路为例:用户注册->邮箱验证->实名认证->开通付费->账号注销。这个过程中,每个状态变更都代表一个不可逆的操作。那么,user_status字段应该设计成有序ENUM,枚举值严格限定为:'registered', 'verified', 'certified', 'paid', 'deactivated'。同时,必须添加CHECK约束,确保状态只能从左向右单向推进,禁止跳过任何中间状态,比如从verified直接跳到paid。

方法二:金额字段强制精度锚定

所有金额类字段,比如price、discount、total,必须强制使用DECIMAL(12,2),绝对不能出现FLOAT或DOUBLE类型。小数点后固定两位,不允许出现.00以外的精度,比如199.999在入库时会被直接截断报错。这一点是硬性要求,用FLOAT类型很容易导致支付对账出现0.01元的偏差。

索引与性能兜底策略

第一步:识别高频查询路径

① 如果每次查询用户时都带着WHERE tenant_id = ? AND status = ?,那就在tenant_id和status上建立复合索引;

② 经常按创建时间倒序查询最近100条记录?在created_at字段上建降序索引;

③ 搜索用户名需要支持模糊匹配?考虑在username字段上建GIN索引,配合trigram扩展。

第二步:禁用危险默认

不生成任何B-tree单列索引;所有索引名必须以idx_开头加字段名缩写(比如idx_tnt_sts);禁止为外键字段自动添加索引——只有显式声明时才创建。

第三步:写入性能保护

每张表默认添加pg_stat_statements兼容注释,格式类似:/* pg_stat_statements: user_search_by_email */,便于后续快速定位慢查询源头。

来源:https://www.php.cn/faq/2791903.html?uid=1431639

相关热点

继续查看同栏目近期热点。

延伸阅读

补充最近整理过的热点入口。