首页
学习
活动
专区
圈层
工具
发布

Qoder @database功能上线!自动关联数据库 Schema,后端 AI Coding 效率拉满

数据库是后端开发的灵魂。在 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中进行数据库类型声明。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OMznmYegh7zlGN9J1-KJOZkg0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。
领券