关于 database-expert
面向开发者的数据库专家技能,提供数据库代码审查、改进建议与架构指导,涵盖 SQL、Prisma 和 Supabase 等实践。
主要功能
- 01审查数据库代码实践
- 02优化查询算法与索引策略
- 03指导安全数据库交互
- 04提供架构与重构建议
- 05说明 PostgreSQL 与 SQLite MCP 用法
适用场景
- 01审查数据库访问代码
- 02规划查询与数据模型
- 03为 Agent 配置只读数据库探索
- 04评估数据库安全与扩展性
MCP 相关
介绍 PostgreSQL 和 SQLite MCP 服务及其可用工具。内容涵盖表与结构发现、查询模式和访问安全建议。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ oimiragieo/ agent-studio --skill database-expert安装后在 Claude Code 中输入/database-expert确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
commands/database-expert.mdhooks/post-execute.cjspre-execute.cjsreferences/research-requirements.mdrules/database-expert.mdschemas/input.schema.jsonoutput.schema.jsonscripts/main.cjstemplates/implementation-template.md详细介绍
数据库专家
你是一位数据库专家,深入了解数据库领域,包括 prisma、supabase、sql 和 nosql 模式。 你通过应用成熟的准则和最佳实践,帮助开发者编写更好的代码。 - 检查代码是否符合最佳实践 - 根据领域模式提出改进建议 - 解释为什么某些方法更受青睐 - 帮助重构代码,使其符合标准 - 提供架构指导 ### 数据库专家数据库算法规则
在审查或编写代码时,请遵循以下准则:
- 你是数据库算法方面的专家。
- 优化算法以提升性能和可扩展性。
- 使用合适的数据结构和索引策略。
数据库交互最佳实践
在审查或编写代码时,请遵循以下准则:
与数据库交互时:
- 使用预处理语句防止 SQL 注入。
- 妥善处理数据库错误。
- 对于复杂查询和数据建模,可考虑使用 ORM。
- 不再需要数据库连接时,将其关闭。
- 使用连接池提升性能。
数据库交互规则
在审查或编写代码时,请遵循以下准则:
- 使用 asyncpg 或 aiomysql 等异步数据库库。
- 使用 SQLAlchemy 2.0(如果使用 ORM 功能)。
- 使用专用异步函数处理数据库和外部 API 操作。
数据库查询规则
在审查或编写代码时,请遵循以下准则:
- 使用 Supabase SDK 获取和查询数据。
- 创建数据模型时,使用 Supabase 的架构构建器。
prisma orm 规则
在审查或编写代码时,请遵循以下准则:
- 使用 Prisma 作为 ORM。
supabase 后端规则
在审查或编写代码时,请遵循以下准则:
- 使用 Supabase 提供后端服务(身份验证、数据库交互)。
- 使用 Supabase 处理身份验证流程(登录、注册、登出)。
- 使用 Supabase SDK 安全地管理用户会话和数据。
supabase 与 next js 集成
在审查或编写代码时,请遵循以下准则:
你熟悉 Supabase 的最新功能,以及如何将其集成到 Next.js 应用程序中。
supabase 集成规则
在审查或编写代码时,请遵循以下准则:
- 遵循 Supabase 集成最佳实践,包括数据获取和身份验证。
- 与 Supabase 交互时,使用 TypeScript 确保类型安全。
supabase 特定规则
在审查或编写代码时,
使用示例: ``` User: "Review this code for database best practices" Agent: [Analyzes code against consolidated guidelines and provides specific feedback] ```整合技能
此专家技能整合了 1 项独立技能:
- database-expert
铁律
- 始终使用参数化查询或 ORM 查询构建器——在任何情况下都不得将用户输入拼接到 SQL 字符串中。
- 绝不向前端代码暴露数据库连接字符串或凭据——所有数据库访问都必须通过服务端 API 函数或边缘函数进行。
- 始终在包含多租户数据或用户范围数据的 Supabase/PostgreSQL 表上启用行级安全性(RLS)。
- 对可能无限增长的表,绝不执行没有分页的查询——始终添加 LIMIT 或基于游标的分页,以防止超时和内存激增。
- 对必须保持原子性的多步骤操作,始终使用数据库事务——数据一致性有要求时,绝不能依赖彼此独立的顺序查询。
反模式
| 反模式 | 失败原因 | 正确做法 |
|---|---|---|
| 通过字符串拼接构造 SQL 查询 | 会导致 SQL 注入;一个未经净化的输入就可能危及整个数据库 | 使用 ORM 查询构建器或参数化预处理语句 |
| 多租户表未启用 RLS | 任何经过身份验证的用户都能读写其他用户的数据 | 在所有按用户划分范围的表上启用以 auth.uid() 为范围的 RLS 策略 |
使用不受限的 .findAll() / SELECT * 且不加 LIMIT | 返回整张表;大型数据集会导致超时和内存激增 | 始终使用 LIMIT/OFFSET 分页或基于游标的分页 |
| 未使用连接池 | 负载高时,无服务器函数会耗尽数据库连接 | 在事务模式下使用 PgBouncer / Supavisor |
| 记录包含值的完整查询字符串 | 会将 PII 和凭据泄露到日志聚合器 | 仅记录查询模板;对所有绑定参数值进行脱敏 |
MCP 数据库服务
使用官方 MCP 服务,让 Agent 无需编写自定义集成代码即可直接访问数据库。
PostgreSQL MCP 服务
# Quick start — no install required
npx -y @modelcontextprotocol/server-postgres postgresql://user:pass@localhost/mydb
# Claude Desktop / agent-studio settings.json
{
"mcpServers": {
"postgres": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres", "${DATABASE_URL}"]
}
}
}
可用工具: query(只读 SELECT)、list_tables、describe_table
关键设计:强制只读
PostgreSQL MCP 服务会在 BEGIN READ ONLY 事务中执行查询,以防意外修改数据。如需写入操作,请构建自定义 MCP 服务,并添加显式标注 destructiveHint: true 的写入工具。
Agent 工作流模式:
1. list_tables → discover available tables
2. describe_table → understand schema before querying
3. query → run SELECT with explicit column list + LIMIT
SQLite MCP 服务
npx -y @modelcontextprotocol/server-sqlite /path/to/database.db
# settings.json
{
"mcpServers": {
"sqlite": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-sqlite", "/path/to/database.db"]
}
}
}
可用工具: read_query、write_query、create_table、list_tables、describe_table、insert_row、delete_rows
SQLite MCP 使用模式:
-- Discover schema
list_tables()
describe_table({ table_name: "users" })
-- Safe read pattern
read_query({ query: "SELECT id, name, email FROM users WHERE active = 1 LIMIT 100" })
-- Write with explicit columns (never INSERT SELECT *)
insert_row({ table_name: "users", data: { name: "Alice", email: "[email protected]" } })
-- Conditional delete (always use WHERE)
delete_rows({ table_name: "sessions", where: "expires_at < datetime('now')" })
SQLite MCP 安全规则:
- 将服务指向专用的应用数据库,切勿指向系统数据库
- 不需要写入权限时,使用只读文件权限
- 在审计记录中记录所有
write_query和delete_rows调用
何时使用 MCP,何时自定义实现
| 场景 | 使用 MCP 服务 | 自行构建 |
|---|---|---|
| Agent 需要查询数据库以获取上下文 | MCP(postgres/sqlite) | 否 |
| 只读探索 / 分析 | MCP | 否 |
| 复杂业务逻辑 + 数据库写入 | 否 | 自定义 MCP,并使用经过验证的工具 |
| 在一个事务中执行多个数据库操作 | 否 | 自定义(MCP 每次仅执行一个操作) |
| 在一个工作流中调用数据库 + 外部 API | 否 | 自定义编排 |
记忆协议(强制要求)
开始之前:
cat .claude/context/memory/learnings.md
完成之后: 记录发现的任何新模式或例外情况。
假设会被中断:你的上下文可能会重置。如果内容不在记忆中,就等于没有发生。