Claude Skills
CollectionsCompareWorkflowsNominate
Sign inSign up
© 2026 Curated Agent Skills·Learn more about Agent Skills
Back to repository

database

verified

Database design, query optimization, migrations, and indexing. Use when designing schemas, writing queries, or managing migrations.

View on GitHub

Marketplace

claude-code-best-practices

xiaobei930/claude-code-best-practices

Plugin

cc-best

Repository

xiaobei930/claude-code-best-practices
12stars

skills/database/SKILL.md

Last Verified

February 2, 2026

Install Skill

Select agents to install to:

Scope:
npx add-skill https://github.com/xiaobei930/claude-code-best-practices/blob/main/skills/database/SKILL.md -a claude-code --skill database

Installation paths:

Claude
.claude/skills/database/
Powered by add-skill CLI

Instructions

# 数据库模式技能

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

## 触发条件

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

## 数据库专属模式

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

| 数据库     | 加载文件      | 适用场景               |
| ---------- | ------------- | ---------------------- |
| PostgreSQL | `postgres.md` | 企业应用、复杂查询     |
| MySQL      | `mysql.md`    | Web 应用、读多写少     |
| Oracle     | `oracle.md`   | 大型企业、高并发 OLTP  |
| SQLite     | `sqlite.md`   | 嵌入式、移动端、本地化 |

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

---

## 通用 Schema 设计

### 命名规范

```sql
-- 表名:小写下划线,复数形式
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
```

### 必备字段

```sql
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 = value` | B-tree        |
| `WHERE col > value` | B-tree        |
| 全文搜索            | 全文索引      |
| JSON 字段查询       | GIN/JSON 索引 |
| 时序数据范围查询    | BRIN(PG)    |

### 复合索引原则

```sql
-- 规则:等值列在前,范围列在后
-- 查询: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 次查询获取每个用户的订单 

Validation Details

Front Matter
Required Fields
Valid Name Format
Valid Description
Has Sections
Allowed Tools
Instruction Length:
3348 chars