数据库是后端开发的灵魂。在 AI Coding 极度流行的今天,虽然生成 SQL 语句已不再是难事,但 AI 工具往往因拿不到准确的表结构而“乱写代码”。尤其在数据库Schema未保存在本地(如使用 Flyway 进行迁移)的情况下,AI 无法获取最全的上下文,其实战能力会大打折扣。
Qoder JetBrains 插件为此填补了最后一环:我们将数据库能力内置为核心上下文。通过 @database 能力,你可以一键将 IDE 中的数据库连接转化为 AI 的知识库。不再需要手动复制 DDL,直接引用 @database 即可让 AI 结合真实业务表结构进行 SQL 编写、数据模拟或架构评审,真正实现开发流程的闭环。
目前,除 JetBrains 官方推出的 Junie 外(受地域限制,中国区暂无法使用),Qoder 是JetBrains上唯一深度支持“数据库原生感知”的 AI Coding 插件。
Qoder JetBrains 插件在数据库场景下的核心能力
1、在 Qoder 的Ask/Agent模式下引用数据库
首先我们需要在JetBrains IDE中添加数据库连接。打开数据库工具窗口,创建对应的数据库连接。数据库创建完毕后,你可以点击Query Console按钮,然后输入SQL,执行数据库查询操作。
更多使用信息,请参考:
https://www.jetbrains.com/help/idea/database-tool-window.html
数据库连接创建完毕后,接下来我们就可以在Ask/Agent模式下引用数据库的schema。在Qoder会话窗口的输入框中,点击Add Context按钮,然后选择@database,然后选择对应的数据库Schema,就可以将数据库Schema添加到上下文中。
注意事项:添加到上下文中的SQL文件,是基于数据库的schema的,如果一个数据库有多个schema,就会有多个schema sql文件。
数据库schema添加到上下文后,你就可以以提示词的方式询问相关的数据库相关的问题,如对数据库schema进行 review,基于schema生成代码,自然语言生成SQL等等。
在Ask模式下,如果返回了SQL代码块的话,Qoder会为SQL代码块添加一个执行按钮,你可以直接执行对应的SQL语句,如下:
注意事项:当下Qoder会查询活跃的数据库Query Console执行对应的SQL,所以你需要提前打开对应数据库的Query Console,才能执行聊天窗口中的SQL。
2、Query Console的SQL生成支持
如果你在数据库的Query Console中,你可以调用inline chat方式来生成对应的SQL。按下Ctrl + Shift + I,然后输入生成SQL的自然语言,然后按下回车生成SQL。在该过程中,Qoder会依据当前数据库的schema,自动将数据库的schema添加到上下文中,这样就可以更准确地生成SQL语句。
3、斜杠指令(Slash Command)支持
如果你对数据库相关的一些常见操作,如数据库review,生成SQL等,你可以创建对应的斜杠指令,然后再基于这些指令来完成对应的任务。 打开Qoder窗口,点击个人头像图标,选择`个人设置`,然后在`指令`去创建和维护相关的指令。 指令调用如下图:
这里列举一下数据库常用的prompt场景,如下:
如果只生成SQL的场景,你可以在Query Console中进行,这样更方便些。当然你也可以在ask模式下通过/sql 指令生成SQL,在ask模式下,你可以获得更多SQL语言选项。
提示:Qoder默认会扫描项目中的文件并和用户问题进行关联,如果是NL2SQL或者只针对数据库schema场景,你可以在指令开头添加Don't scan project files!,这样就不会进行文件扫描,但是AGENTS.md和Rules还是会被包含的。这种方式可以节约你不少Token,而且可以规避歧义。
DataGrip 和 Qoder
DataGrip是JetBrains针对数据库推出的产品,Qoder对其也有很好的支持,这里做一个简单的说明。
点击顶部导航栏的...更多图标,在弹出的菜单中选择Qoder,并点击大头针按钮,将Qoder以常驻的方式添加到顶部导航栏。
在DataGrip中,核心的交互都是基于Query Console,你可以通过查询工具栏的Qoder按钮或者Ctrl + Shif +I快捷键,调查Inline Chat输入框,然后输入自然语言,就完成对应的SQL生成。在此过程中,Qoder会自动选择对应的数据库schema。
考虑到DataGrip主要是针对数据库场景,这里还是建议考虑在项目目录下添加AGENTS.md文件,用于项目的指导,如表名规范、SQL GuideLine或者特定的数据标注等。
使用 Qoder 提升数据库开发效率
了解了Qoder JetBrains 插件在数据库方面的核心能力后,下面,我们将通过具体的业务场景,带大家探索如何用 Qoder 加速数据库开发。
1、数据库设计
在项目初期,我们需要进行数据库设计,在Qoder中,你可以通过两种方式来创建对应的数据库Schema。
Agent模式: 在Agent模式下,你可以更好地设置上下文,如添加关联的markdown文件,然后以自然语言输入具体的要求,就可以生成对应的数据库表结构。接下来打开对应的SQL文件,然后执行即可。
如果只是涉及到数据库的表结构调整,可以打开数据库Schema的Query Console,输入具体的要求,然后接受对应的SQL语句,当然你也可以进行微调,最后执行SQL语句即可。
如果数据库的schema并不复杂,也不需要关联相关的文件,你可以选择在Query Console中直接输入需求,然后创建对应的数据库表结构。
总结一下数据库设计在Qoder下使用实践:
1. Agent模式:复杂的数据库结构设计场景下使用,如要关联设计文档,同时生成的SQL文件要遵循相关的rules,同时生成特定的SQL文件,如Flyway迁移脚本等。
2. Query Console:简单数据库结构、结构调整或者微小改动,请使用Query Console。
如果你有标准的创建表结构样例,可以考虑提供一个样例,方便Qoder更好地生成表结构,如以下样例:
-- 表级别注释示例CREATE TABLE user_info( id INT COMMENT '用户ID (标准字段名: user_id, 主键)', name VARCHAR(50) COMMENT '用户姓名 (标准字段名: name, 用户真实姓名)', created_at DATETIME COMMENT '注册时间 (标准字段名: created_at, 账号创建时间)', status TINYINT COMMENT '状态 (标准字段名: status, 枚举值: 0-禁用 1-正常 2-冻结)', PRIMARY KEY (uid)) COMMENT='用户基本信息表 | 标准表名: user_information | 业务域: 用户域 | 更新方式: 实时';
考虑到后续基于Schema生成代码和生成sql的场景,这里建议数据库设计要遵循好的规约,方便后续的工作,以下是一些指导规则。
命名规范
使用清晰描述性的名称:表名和字段名要能直接表达含义(如user、order_item),建议采用单数形式;
保持命名一致性:统一使用下划线命名法(snake_case)或驼峰命名法;
避免缩写:用customer_address而非cust_addr;
布尔字段加前缀:如is_active、has_paid;
结构设计
主键明确:每个表都有清晰的主键,命名为id或table_name_id;
外键关系清晰:外键命名如user_id、order_id,明确指向关联表;
添加时间戳:包含created_at、updated_at字段;
文档和注释
添加表注释:说明表的用途;
添加字段注释:解释字段含义、取值范围、单位等;
枚举值说明:如状态字段,注释说明每个值的含义;
类型选择
使用合适的数据类型:避免全用 VARCHAR;
设置合理的长度限制;
NULL值策略明确:哪些字段允许NULL,哪些必填;
默认值明确:如果有明确的默认值,需要指出;
2、数据库标注:让遗留数据库也能被AI更好理解
如果你已有的数据库表结构,对AI并不友好,如命名规范,你可以对数据库表结构进行标注,让AI更好地理解。假设数据库中某一表结构:
CREATE TABLE tbl_yonghu( id BIGINT AUTO_INCREMENT PRIMARY KEY, xin_bie CHAR(2) NOT NULL, nian_ling int NOT NULL, gonghao varchar(32) not null UNIQUE, jiru_date varchar(32));
如果你没法对既有的数据结构进行调整,你可以使用额外的json数据对现有的数据库结构进行标注,如db-metadata.json然后在上下文添加数据库schema时,同时添加该JSON标注文件。样例如下:
{ "type": "database","description": "数据库表结构标注,以这里的定义为准","tables": { "tbl_yonghu": { "label": "用户表", "description": "存储系统用户信息", "required": [ "id", "xin_bie", "nian_ling", "gonghao" ], "columns": { "id": { "label": "用户ID", "type": "int", "description": "唯一标识" }, "xin_bie": { "label": "性别", "type": "char(2)", "description": "用户性别", "enum": [ "男", "女" ] }, "nian_ling": { "label": "年龄", "type": "int", "description": "用户年龄" }, "gonghao": { "label": "工号", "type": "varchar(16)", "description": "用户的工号", "unique": true }, "jiru_date": { "label": "加入时间", "type": "varchar(16)", "description": "用户加入的时间", "format": "date", "nullable": true } } } }}
这样Qoder会在理解遗留 数据库结构时,也会参考该JSON结构,这样就可以更好地理解数据库结构,如生成代码,SQL时,都会非常准确。
3、Qoder + 数据库注意事项
数据库表非常多:如果数据库schema非常大,也就是表非常多,如ERP,CRM等场景,这可能导致超出Agent的上下文。建议将数据库的schema导出为多个SQL文件,然后通过添加文件的方式添加到上下文中。
数据库方言(dialect):Qoder会自动将数据库dialect以注释的方式添加到数据库schema中,你不需要再声明数据库类型。如果你要向上下文添加SQL文件,可以考虑在SQL文件中添加如-- dialect: mysql这样的注释,用于标明数据库类型。当然也可以在全局AGENTS.md中进行数据库类型声明。