关系型数据库应用技能Skill using-relational-databases

本技能提供在多编程语言中实现关系型数据库的全面指南,包括数据库选择、ORM/查询构建器使用、迁移策略、连接池配置和无服务器数据库部署,适用于构建CRUD应用、事务系统和结构化数据存储。关键词:关系型数据库、PostgreSQL、MySQL、SQLite、ORM、查询构建器、迁移、连接池、无服务器数据库、后端开发。

后端开发 0 次安装 0 次浏览 更新于 3/23/2026

name: 使用关系型数据库 description: 在Python、Rust、Go和TypeScript中实现关系型数据库。适用于构建CRUD应用、事务系统或结构化数据存储。涵盖PostgreSQL(主要)、MySQL、SQLite、ORM(SQLAlchemy、Prisma、SeaORM、GORM)、查询构建器(Drizzle、sqlc、SQLx)、迁移、连接池和无服务器数据库(Neon、PlanetScale、Turso)。

关系型数据库

目的

本技能指导在多语言环境中选择和实现关系型数据库。为事务系统、CRUD应用和结构化数据存储选择最优的数据库引擎、ORM/查询构建器和部署策略。

何时使用此技能

触发此技能当:

  • 构建用户认证、内容管理、电子商务应用
  • 实现CRUD操作(创建、读取、更新、删除)
  • 设计具有关系的数据模型(用户→帖子、订单→物品)
  • 在生产环境中安全迁移模式
  • 为性能设置连接池
  • 评估无服务器数据库选项(Neon、PlanetScale、Turso)
  • 与前端技能集成(表单、表格、仪表板、搜索过滤)

跳过此技能对于:

  • 大规模时间序列数据(使用时序数据库)
  • 实时分析(使用列式数据库)
  • 文档密集型工作负载(使用文档数据库)
  • 键值缓存(使用Redis、Memcached)

快速参考:数据库选择

数据库选择决策树
═══════════════════════════════════════════════════════════

主要关注点?
├─ 最大灵活性和扩展性(JSON、数组、向量搜索)
│  └─ PostgreSQL
│     ├─ 无服务器 → Neon(缩放至零、数据库分支)
│     └─ 传统 → 自托管、AWS RDS、Google Cloud SQL
│
├─ 嵌入式/边缘部署(本地优先、全局延迟)
│  └─ SQLite或Turso
│     ├─ 全局分发 → Turso(libSQL、边缘副本)
│     └─ 仅本地 → SQLite(嵌入式、零配置)
│
├─ 遗留系统/MySQL必需
│  └─ MySQL
│     ├─ 无服务器 → PlanetScale(非阻塞迁移)
│     └─ 传统 → 自托管、AWS RDS、Google Cloud SQL
│
└─ 快速原型开发
   ├─ Python → SQLModel(FastAPI)或SQLAlchemy 2.0
   ├─ TypeScript → Prisma(最佳开发者体验)或Drizzle(性能)
   ├─ Rust → SQLx(编译时检查)
   └─ Go → sqlc(类型安全代码生成)

快速参考:ORM与查询构建器

ORM与查询构建器选择
═══════════════════════════════════════════════════════════

团队优先事项?
├─ 开发速度/开发者体验
│  └─ ORM(抽象SQL,自动处理关系)
│     ├─ Python → SQLAlchemy 2.0、SQLModel
│     ├─ TypeScript → Prisma(迁移、类型生成)
│     ├─ Rust → SeaORM(Active Record + Data Mapper)
│     └─ Go → GORM、Ent
│
├─ 性能/查询控制
│  └─ 查询构建器(类SQL,零抽象开销)
│     ├─ Python → SQLAlchemy Core、asyncpg
│     ├─ TypeScript → Drizzle、Kysely
│     ├─ Rust → SQLx(编译时查询验证!)
│     └─ Go → sqlc(从SQL生成类型)
│
├─ 类型安全/编译时保证
│  ├─ Rust → SQLx(在构建时检查查询)
│  ├─ Go → sqlc(从SQL生成类型)
│  ├─ TypeScript → Prisma或Drizzle
│  └─ Python → SQLModel(Pydantic集成)
│
└─ 复杂查询/连接
   ├─ SQL优先 → 查询构建器或原始SQL
   └─ ORM友好 → SeaORM、SQLAlchemy ORM

多语言实现

Python:SQLAlchemy 2.0 + SQLModel

推荐库:

  • SQLAlchemy 2.0 (/websites/sqlalchemy_en_21) - ORM + Core,7,090代码片段
  • SQLModel - FastAPI集成,Pydantic验证
  • asyncpg - 高性能异步PostgreSQL驱动

何时使用:

  • 需要灵活性的生产应用
  • FastAPI/Starlette后端
  • 异步/等待工作流

快速模式:

from sqlmodel import SQLModel, Field, Session
class User(SQLModel, table=True):
    id: int | None = Field(default=None, primary_key=True)
    email: str = Field(unique=True, index=True)

参见: references/orms-python.md 获取完整的SQLAlchemy/SQLModel模式、异步工作流和连接池。

TypeScript:Prisma与Drizzle

推荐库:

  • Prisma 6.x (/prisma/prisma, 评分:96.4, 4,281文档片段) - 最佳开发者体验,迁移
  • Drizzle ORM (/drizzle-team/drizzle-orm-docs, 评分:95.4, 4,037片段) - 性能,类SQL语法

快速比较:

  • Prisma:最佳开发者体验,自动生成类型,包含迁移
  • Drizzle:最佳性能,类SQL语法,零开销

参见: references/orms-typescript.md 获取Prisma与Drizzle的详细比较、Kysely、TypeORM模式。

Rust:SQLx(编译时检查)

推荐库:

  • SQLx 0.8 - 编译时查询验证,异步
  • SeaORM 1.x - 带有Active Record模式的完整ORM
  • Diesel 2.3 - 成熟、稳定(同步/异步)

快速模式:

use sqlx::FromRow;
#[derive(FromRow)]
struct User { id: i32, email: String, name: String }
// 编译时检查的查询(在构建时验证!)
let user = sqlx::query_as::<_, User>("SELECT * FROM users WHERE email = $1")
    .bind("test@example.com").fetch_one(&pool).await?;

参见: references/orms-rust.md 获取SQLx宏、SeaORM、Diesel模式和编译时保证。

Go:sqlc(类型安全代码生成)

推荐库:

  • sqlc - 从SQL查询生成Go代码
  • GORM v2 - 带有关联、钩子的完整ORM
  • Ent - 基于图的ORM,代码作为模式
  • pgx - 高性能PostgreSQL驱动

快速模式:

-- queries.sql: SQL注解生成类型安全的Go代码
-- name: CreateUser :one
INSERT INTO users (email, name) VALUES ($1, $2) RETURNING *;
user, err := queries.CreateUser(ctx, db.CreateUserParams{Email: "test@example.com"})

参见: references/orms-go.md 获取sqlc设置、GORM、Ent和pgx模式。

连接池

推荐池大小:

  • Web API(单实例):10-20个连接
  • 无服务器(每个函数):1-2个连接 + pgBouncer
  • 后台工作器:5-10个连接

参见: references/connection-pooling.md 获取配置示例、大小公式和监控策略。

迁移

关键原则:

  1. 使用多阶段部署进行列删除(生产环境绝不直接删除)
  2. 使用 CREATE INDEX CONCURRENTLY(PostgreSQL)避免阻塞写入
  3. 在具有生产级数据量的暂存环境中测试迁移

工具: Alembic(Python)、Prisma Migrate(TypeScript)、SQLx迁移(Rust)、golang-migrate(Go)

参见: references/migrations-guide.md 获取安全迁移模式、多阶段部署和回滚策略。

无服务器数据库

数据库 类型 关键特性 最佳适用
Neon PostgreSQL 数据库分支、缩放至零 开发工作流、预览环境
PlanetScale MySQL(Vitess) 非阻塞模式更改 MySQL应用、零停机迁移
Turso SQLite(libSQL) 边缘部署、低延迟 边缘函数、全局分发

参见: references/serverless-databases.md 获取设置示例、分支工作流和成本比较。

前端集成

常见集成模式:

  • 表单技能:表单提交 → API验证 → 数据库CRUD(INSERT/UPDATE)
  • 表格技能:分页查询 → API → 带有排序/过滤的表格显示
  • 仪表板技能:聚合查询(COUNT、SUM) → API → KPI卡片
  • 搜索过滤技能:全文搜索(PostgreSQL tsvector) → 排名结果

参见工作示例在: examples/python-sqlalchemy/examples/typescript-drizzle/examples/rust-sqlx/

捆绑资源

参考文档

  • references/postgresql-guide.md - PostgreSQL特性(pgvector、PostGIS、TimescaleDB)
  • references/mysql-guide.md - MySQL特定模式、PlanetScale集成
  • references/sqlite-guide.md - SQLite模式、Turso边缘部署
  • references/orms-python.md - SQLAlchemy 2.0、SQLModel、asyncpg
  • references/orms-typescript.md - Prisma、Drizzle、Kysely比较
  • references/orms-rust.md - SQLx、SeaORM、Diesel
  • references/orms-go.md - GORM、sqlc、Ent、pgx
  • references/migrations-guide.md - 安全模式演化模式
  • references/connection-pooling.md - 池大小和监控
  • references/serverless-databases.md - Neon、PlanetScale、Turso部署

工作示例

  • examples/python-sqlalchemy/ - SQLAlchemy 2.0 + FastAPI带池、迁移
  • examples/typescript-prisma/ - Prisma + Next.js带模式、迁移
  • examples/typescript-drizzle/ - Drizzle + Hono带类型安全查询
  • examples/rust-sqlx/ - SQLx + Axum带编译时检查
  • examples/go-sqlc/ - sqlc + Gin带生成的类型安全代码

实用脚本

  • scripts/validate_schema.py - 验证数据库模式结构、约束
  • scripts/generate_migration.py - 为常见操作生成迁移模板

最佳实践

安全:

  • 始终使用参数化查询(防止SQL注入)
  • 用Argon2/bcrypt哈希密码
  • 使用环境变量存储连接字符串
  • 在生产环境中启用SSL/TLS

性能:

  • 使用连接池(Web API为10-20个)
  • 在过滤/排序列上创建索引
  • 为大结果集实现分页
  • 使用 EXPLAIN ANALYZE 分析慢查询

可靠性:

  • 先在暂存环境测试迁移
  • 为多语句操作使用事务
  • 监控连接池耗尽
  • 设置并测试数据库备份

开发:

  • 版本控制模式和迁移
  • 使用数据库分支(Neon)进行功能开发
  • 编写针对真实数据库的集成测试