database-design · spencerpauly — скилл для Claude Code: что делает и как установить
Скилл помогает спроектировать реляционную схему базы данных, расставить внешние ключи, индексы и сгенерировать модели для Prisma или Drizzle по требованиям к проекту.
npx skills add spencerpauly/awesome-cursor-skills --skill database-design -a claude-codeЧто делает database-design
Скилл разбирает требования к системе на сущности и формирует SQL-таблицы. Для связей задаются внешние ключи с правилами ON DELETE вроде CASCADE или RESTRICT, а для полей проставляются типы данных: TIMESTAMPTZ для дат, UUID для распределённых систем или BIGSERIAL для внутренних идентификаторов. Также шаблон генерирует схему для ORM — Prisma или Drizzle.
Внутри заложен пошаговый процесс от нормализации до типовых архитектурных паттернов. Сюда входят мягкое удаление через deleted_at, таблицы аудита, иерархические деревья и теги через промежуточные таблицы. Начинать здесь предписано строго с третьей нормальной формы (3NF), а денормализацию откладывать до реальных замеров узких мест.
Инструкция прямо запрещает вешать индексы на таблицы размером меньше 1000 строк и столбцы с низкой кардинальностью. Это исключает лишнюю нагрузку на запись.
Какие задачи решает
- Спроектировать таблицы и связи между сущностями по текстовому описанию
- Расставить индексы под частые фильтры и условия соединений
JOIN - Сгенерировать схему для Prisma или Drizzle с таймзонами и внешними ключами
- Настроить мягкое удаление записей и аудит событий в базе
Примеры запросов агенту
- Спроектируй схему базы данных для трекера задач с проектами, пользователями и комментариями
- Добавь индексы и правила удаления для таблиц заказов и позиций заказа в Drizzle
- Покажи структуру таблиц для иерархических категорий с поддержкой аудита изменений
Как установить database-design
1Через Skills CLI (Vercel)
npx skills add spencerpauly/awesome-cursor-skills --skill database-design -a claude-code2Вручную: положить файлы
~/.claude/skills/database-design/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/database-design/
1Через Skills CLI (Vercel)
npx skills add spencerpauly/awesome-cursor-skills --skill database-design -a codex2Вручную: положить файлы
.agents/skills/database-design/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add spencerpauly/awesome-cursor-skills --skill database-design -a cursor2Вручную: положить файлы
.cursor/skills/database-design/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install spencerpauly/awesome-cursor-skills database-design2Вручную: положить файлы
.github/skills/database-design/SKILL.md1Через Skills CLI (Vercel)
npx skills add spencerpauly/awesome-cursor-skills --skill database-design -a gemini-cli2Командой платформы
gemini skills install https://github.com/spencerpauly/awesome-cursor-skills --path resources/database-designВручную: положить файлы
.devin/skills/database-design/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add spencerpauly/awesome-cursor-skills --skill database-design -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Из того же набора59
Другие версии database-design
Похожие
Рядом в теме «Данные и базы»
Все скиллы по теме «Данные и базы» →Вопросы о database-design
Как установить database-design в Claude Code?
Выполните команду npx skills add spencerpauly/awesome-cursor-skills --skill database-design -a claude-code. Также можно вручную сохранить файл по пути ~/.claude/skills/database-design/SKILL.md.
Что делает скилл database-design?
Он направляет ИИ-ассистента при составлении реляционных схем данных: выделяет таблицы, связывает их через ключи, определяет ограничения CHECK и генерирует код миграций для SQL или ORM.
В каких случаях скилл рекомендует не создавать индексы?
Индексы не ставятся на небольшие таблицы до 1000 строк, на редко используемые в выборках поля и столбцы с низкой кардинальностью вроде булевых значений.
Исходный текст
SKILL.md · CC0-1.0
---
name: database-design
description: Design database schemas — tables, relationships, indexes, constraints, and ORM setup. Covers relational design, normalization, and common patterns.
user-invocable: true
---
# Database Design
Design a database schema from requirements.
## Workflow
### 1. Identify Entities
From the requirements, extract the core entities (nouns):
- Users, Teams, Projects, Tasks, Comments, etc.
- Each entity becomes a table
### 2. Define Relationships
| Relationship | Implementation |
|-------------|----------------|
| One-to-one | Foreign key with unique constraint, or embed in same table |
| One-to-many | Foreign key on the "many" side |
| Many-to-many | Junction/join table |
| Self-referential | Foreign key pointing to same table (e.g. `parent_id`) |
### 3. Design the Schema
For each table:
```sql
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
email TEXT NOT NULL UNIQUE,
name TEXT NOT NULL,
avatar_url TEXT,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE TABLE projects (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name TEXT NOT NULL,
owner_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
```
### 4. Apply Best Practices
**Primary keys:**
- Use `UUID` for distributed systems or public-facing IDs
- Use `SERIAL`/`BIGSERIAL` for internal-only IDs (faster joins)
**Timestamps:**
- Always add `created_at` and `updated_at`
- Use `TIMESTAMPTZ` (with timezone), never `TIMESTAMP`
**Naming:**
- Tables: plural snake_case (`users`, `project_members`)
- Columns: singular snake_case (`user_id`, `created_at`)
- Indexes: `idx_<table>_<columns>` (`idx_users_email`)
**Constraints:**
- `NOT NULL` on everything unless it's genuinely optional
- `UNIQUE` on natural keys (email, slug, external IDs)
- `REFERENCES` with `ON DELETE` behavior (CASCADE, SET NULL, RESTRICT)
- `CHECK` constraints for enums or value ranges
### 5. Add Indexes
```sql
-- For columns you filter/sort by frequently
CREATE INDEX idx_projects_owner_id ON projects(owner_id);
-- For unique lookups
CREATE UNIQUE INDEX idx_users_email ON users(email);
-- Composite for common query patterns
CREATE INDEX idx_tasks_project_status ON tasks(project_id, status);
```
**When to index:**
- Foreign keys (almost always)
- Columns in WHERE clauses
- Columns in ORDER BY
- Columns in JOIN conditions
**When NOT to index:**
- Small tables (<1000 rows)
- Columns with low cardinality (boolean, status with 3 values)
- Columns that are rarely queried
### 6. ORM Setup
**Prisma:**
```prisma
model User {
id String @id @default(uuid())
email String @unique
name String
projects Project[]
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
@@map("users")
}
```
**Drizzle:**
```typescript
export const users = pgTable('users', {
id: uuid('id').primaryKey().defaultRandom(),
email: text('email').notNull().unique(),
name: text('name').notNull(),
createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),
updatedAt: timestamp('updated_at', { withTimezone: true }).notNull().defaultNow(),
});
```
## Common Patterns
**Soft deletes:** Add `deleted_at TIMESTAMPTZ` instead of actually deleting rows
**Audit log:** Separate `audit_events` table with `entity_type`, `entity_id`, `action`, `actor_id`, `payload`
**Tags/labels:** Junction table (`task_tags`) with `task_id` + `tag_id`
**Tree/hierarchy:** `parent_id` self-reference, or materialized path (`/1/4/7/`)
**Polymorphic associations:** Use `entity_type` + `entity_id` columns (avoid if possible, prefer separate FKs)
## Tips
- Start normalized (3NF), denormalize only when you have measured performance problems
- Don't store derived data unless you have a caching/invalidation strategy
- Use database enums or check constraints for status fields, not free-text
- Always think about what happens when you delete a parent record
© spencerpauly · CC0-1.0 · spencerpauly/awesome-cursor-skills