mcpField
D
database-expert

database-expert

github.com/oimiragieo数据与数据库4480 次安装17 周前更新
代码仓库

关于 database-expert

面向开发者的数据库专家技能,提供数据库代码审查、改进建议与架构指导,涵盖 SQL、Prisma 和 Supabase 等实践。

主要功能

  1. 01审查数据库代码实践
  2. 02优化查询算法与索引策略
  3. 03指导安全数据库交互
  4. 04提供架构与重构建议
  5. 05说明 PostgreSQL 与 SQLite MCP 用法

适用场景

  1. 01审查数据库访问代码
  2. 02规划查询与数据模型
  3. 03为 Agent 配置只读数据库探索
  4. 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.md
hooks/
post-execute.cjs
pre-execute.cjs
references/
research-requirements.md
rules/
database-expert.md
schemas/
input.schema.json
output.schema.json
scripts/
main.cjs
templates/
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

铁律

  1. 始终使用参数化查询或 ORM 查询构建器——在任何情况下都不得将用户输入拼接到 SQL 字符串中。
  2. 绝不向前端代码暴露数据库连接字符串或凭据——所有数据库访问都必须通过服务端 API 函数或边缘函数进行。
  3. 始终在包含多租户数据或用户范围数据的 Supabase/PostgreSQL 表上启用行级安全性(RLS)。
  4. 对可能无限增长的表,绝不执行没有分页的查询——始终添加 LIMIT 或基于游标的分页,以防止超时和内存激增。
  5. 对必须保持原子性的多步骤操作,始终使用数据库事务——数据一致性有要求时,绝不能依赖彼此独立的顺序查询。

反模式

反模式失败原因正确做法
通过字符串拼接构造 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

完成之后: 记录发现的任何新模式或例外情况。

假设会被中断:你的上下文可能会重置。如果内容不在记忆中,就等于没有发生。

评论

支持 Markdown