Get the FREE Ultimate OpenClaw Setup Guide →

database

Scanned
npx machina-cli add skill xiaobei930/cc-best/database --openclaw
Files (1)
SKILL.md
5.7 KB

数据库模式技能

关联 Agent: architect — 架构设计时加载数据库约束上下文

本技能提供数据库设计和操作的最佳实践,支持多数据库按需加载。

触发条件

  • 设计数据库 Schema
  • 编写数据库查询
  • 优化查询性能
  • 管理数据库迁移
  • 配置索引

数据库专属模式

根据项目技术栈,加载对应的数据库专属文件:

数据库加载文件适用场景
PostgreSQLpostgres.md企业应用、复杂查询
MySQLmysql.mdWeb 应用、读多写少
Oracleoracle.md大型企业、高并发 OLTP
SQLitesqlite.md嵌入式、移动端、本地化

检测方式: 根据连接字符串、ORM 配置或项目依赖确定数据库类型。


通用 Schema 设计

命名规范

-- 表名:小写下划线,复数形式
users, order_items, user_preferences

-- 列名:小写下划线
created_at, updated_at, user_id, is_active

-- 索引名:idx_表名_列名
idx_users_email, idx_orders_user_id_created_at

-- 外键名:fk_表名_关联表
fk_orders_users

必备字段

CREATE TABLE users (
    id BIGINT PRIMARY KEY,           -- 主键
    -- 业务字段...
    created_at TIMESTAMP NOT NULL,   -- 创建时间
    updated_at TIMESTAMP NOT NULL,   -- 更新时间
    deleted_at TIMESTAMP             -- 软删除
);

关系设计

关系类型设计方式示例
一对多子表添加外键orders.user_id → users
多对多中间表 + 联合主键user_roles(user_id, role_id)
一对一子表主键 = 外键user_settings.user_id

通用索引策略

何时创建索引

  • ✅ WHERE 条件频繁使用的列
  • ✅ JOIN 关联的列
  • ✅ ORDER BY / GROUP BY 的列
  • ❌ 很少查询的列
  • ❌ 值重复率高的列(如性别)
  • ❌ 频繁更新的列

索引类型选择

查询模式推荐索引
WHERE col = valueB-tree
WHERE col > valueB-tree
全文搜索全文索引
JSON 字段查询GIN/JSON 索引
时序数据范围查询BRIN(PG)

复合索引原则

-- 规则:等值列在前,范围列在后
-- 查询:WHERE status = 'active' AND created_at > '2024-01-01'

-- ✅ 正确顺序
CREATE INDEX idx_orders_status_created ON orders(status, created_at);

-- ❌ 错误顺序(范围列在前会导致后续列无法使用索引)
CREATE INDEX idx_orders_created_status ON orders(created_at, status);

N+1 问题

问题示例

获取 100 个用户及其订单:
1 次查询获取用户 + 100 次查询获取每个用户的订单 = 101 次查询

解决方案

方案方式适用场景
预加载JOIN 或 IN 查询数据量适中
批量加载分批 IN 查询大数据量
延迟加载按需查询不确定是否需要

分页优化

-- ❌ 大偏移量慢(OFFSET 10000 需要扫描 10000 行)
SELECT * FROM posts ORDER BY id LIMIT 20 OFFSET 10000;

-- ✅ 游标分页(直接定位)
SELECT * FROM posts WHERE id > 10000 ORDER BY id LIMIT 20;

事务原则

ACID 特性

特性含义
A 原子性全部成功或全部失败
C 一致性数据始终有效
I 隔离性事务互不干扰
D 持久性提交后永久保存

隔离级别

级别脏读不可重复读幻读性能
READ UNCOMMITTED最高
READ COMMITTED
REPEATABLE READ
SERIALIZABLE

迁移管理

迁移原则

  1. 版本控制 - 所有迁移文件纳入 Git
  2. 只增不改 - 不修改已执行的迁移
  3. 可回滚 - 每个 UP 对应 DOWN
  4. 原子性 - 一个迁移只做一件事

常用 ORM 命令

# Prisma
npx prisma migrate dev --name add_column

# SQLAlchemy/Alembic
alembic revision --autogenerate -m "add column"
alembic upgrade head

# TypeORM
npm run typeorm migration:generate -- -n AddColumn
npm run typeorm migration:run

最佳实践清单

  • 表名/列名统一命名规范
  • 必备字段:id, created_at, updated_at
  • 软删除而非物理删除
  • 基于查询模式创建索引
  • 避免 N+1 查询
  • 大数据量使用游标分页
  • 迁移文件纳入版本控制
  • 合理配置连接池
  • 使用 EXPLAIN 分析慢查询

数据库专属内容

详细的数据库专属实现请参考:

  • PostgreSQL: postgres.md - 数据类型、索引策略、RLS、性能诊断
  • MySQL: mysql.md - InnoDB 优化、索引策略、字符集
  • Oracle: oracle.md - 分区表、全局索引、PL/SQL
  • SQLite: sqlite.md - WAL 模式、PRAGMA 优化、嵌入式场景

记住: 数据库设计是系统的地基——索引、约束、迁移策略在上线前就要规划好。

Source

git clone https://github.com/xiaobei930/cc-best/blob/main/skills/database/SKILL.mdView on GitHub

Overview

提供数据库设计、查询优化、迁移管理和索引配置的最佳实践。通过按数据库加载专属模式(PostgreSQL、MySQL、Oracle、SQLite),帮助在设计架构、编写查询和管理迁移时提升性能与可靠性。

How This Skill Works

该技能会根据项目所用数据库类型自动加载对应的专属实现文件,并提供通用模式如命名规范、必备字段和关系设计,以及统一的索引策略。通过迁移原则与最佳实践清单,帮助团队实现可追溯、可回滚的变更。

When to Use It

  • 在设计新的数据库 Schema 时,制定命名规范和关系模型
  • 需要编写或改写 SQL 查询以提升性能
  • 需要为高频查询建立正确的索引并优化执行计划
  • 准备进行数据库迁移或版本控制迁移脚本
  • 遇到 N+1 查询、分页或事务隔离等常见性能与一致性挑战时

Quick Start

  1. Step 1: 识别数据库类型并加载对应的专属内容(postgres.md、mysql.md、oracle.md、sqlite.md)
  2. Step 2: 按通用模式定义基础表(如 users、orders)并实现命名规范与必备字段
  3. Step 3: 针对高频查询添加合适的索引,并使用 EXPLAIN 验证执行计划

Best Practices

  • 表名/列名统一命名规范,遵循小写下划线风格
  • 必备字段包括 id、created_at、updated_at,支持软删除
  • 避免直接物理删除,优先使用软删除字段 deleted_at
  • 基于查询模式创建索引,避免在频繁更新的列上建立高成本索引
  • 时刻关注并避免 N+1 查询,优先预加载或批量加载

Example Use Cases

  • 为用户与订单建立外键关系,orders.user_id → users.id
  • 为常用查询创建复合索引,如 idx_orders_status_created
  • 在大数据量场景使用游标分页替代 OFFSET
  • 通过 JOIN 进行预加载,避免 N+1 问题
  • 使用 Prisma/Alembic/TypeORM 等工具生成并应用迁移,确保 UP/DOWN 对应

Frequently Asked Questions

Add this skill to your agents
Sponsor this space

Reach thousands of developers