вариант

Разрабатывать схемы баз данных, планировать миграцию данных, оптимизировать запросы и моделировать взаимосвязи между данными с помощью экспертного анализа и автоматизированных инструментов.

...Расширить все
21
Обновлено время 29 августа 2026 г.

Разработчик баз данных — навык уровня «POWERFUL»

Обзор

Комплексный набор навыков проектирования баз данных, обеспечивающий возможности анализа, оптимизации и миграции на экспертном уровне для современных систем баз данных. Данный набор навыков сочетает теоретические принципы с практическими инструментами, помогая архитекторам и разработчикам создавать масштабируемые, высокопроизводительные и удобные в обслуживании схемы баз данных.

Основные компетенции

Проектирование и анализ схем

  • Анализ нормализации: автоматическое определение уровней нормализации (от 1NF до BCNF)
  • Стратегия денормализации: эффективные рекомендации по оптимизации производительности
  • Оптимизация типов данных: выявление несоответствующих типов и проблем с размером
  • Анализ ограничений: отсутствующие внешние ключи, ограничения уникальности и проверки на нулевые значения
  • Проверка согласованности имен: соблюдение единых шаблонов именования таблиц и столбцов
  • Генерация ERD: автоматическое создание диаграмм Mermaid на основе DDL

Оптимизация индексов

  • Анализ пробелов в индексах: выявление отсутствующих индексов на внешних ключах и шаблонах запросов
  • Стратегия создания составных индексов: оптимальный порядок столбцов для многостолбцовых индексов
  • Обнаружение избыточности индексов: устранение пересекающихся и неиспользуемых индексов
  • Моделирование влияния на производительность: оценка селективности и анализ стоимости запросов
  • Выбор типа индекса: B-дерево, хеш-индекс, частичный индекс, покрывающий индекс и специализированные индексы

Управление миграцией

  • Миграции без простоев: реализация шаблона «расширение-сжатие»
  • Эволюция схемы: безопасное добавление, удаление и изменение типов столбцов
  • Скрипты миграции данных: автоматическое преобразование и проверка данных
  • Стратегия отката: возможности полного отката с проверкой
  • Планирование выполнения: упорядоченные этапы миграции с устранением зависимостей

Рабочий процесс инструмента (запускайте эти скрипты — не анализируйте схемы вручную)

Все пути указаны относительно этой папки навыков; примеры входных данных находятся в assets/.

1. Анализ схемы

python3 schema_analyzer.py --input schema.sql --generate-erd --output-format json -o analysis.json

Принимает SQL DDL или схему в формате JSON (assets/sample_schema.sql / sample_schema.json). Результат включает выводы по нормализации, отсутствующие ограничения, проблемы с именованием и ERD в формате Mermaid — покажите ERD пользователю и устраните отмеченные проблемы перед оптимизацией.

2. Оптимизация индексов с учётом реальных шаблонов запросов

python3 index_optimizer.py --schema assets/sample_schema.json --queries assets/sample_query_patterns.json --analyze-existing --format json -o indexes.json

Сначала запишите часто используемые запросы пользователя в файл JSON с шаблонами запросов (скопируйте assets/sample_query_patterns.json). Результатом является отсортированный по приоритету список рекомендаций по созданию индексов CREATE INDEX, а также удаление избыточных индексов.

3. Сгенерируйте план миграции

python3 migration_generator.py --current current_schema.json --target target_schema.json --zero-downtime --format sql -o migration.sql

--zero-downtime генерирует план расширения-сжатия; --validate-only проверяет выполнимость без генерации SQL.

4. Цикл проверки

Повторно запустить шаг 1 на целевой схеме и убедиться, что проблемы, обнаруженные при первом проходе, устранены; запустить migration_generator.py --validate-only перед передачей миграции.

Принципы проектирования баз данных

→ Подробности см. в файле references/database-design-reference.md

Рекомендации

Проектирование схемы

  1. Используйте понятные имена: четкие и последовательные соглашения об именовании
  2. Выбирайте подходящие типы данных: столбцы подходящего размера для эффективного хранения
  3. Определите надлежащие ограничения: внешние ключи, проверки, уникальные индексы
  4. Учитывайте будущий рост: планируйте масштабируемость с самого начала
  5. Документируйте связи: четкие связи по внешним ключам и бизнес-правила

Оптимизация производительности

  1. Стратегическое создание индексов: охват типичных шаблонов запросов без избыточного индексирования
  2. Мониторинг производительности запросов: регулярный анализ медленных запросов
  3. Разбивайте большие таблицы на партиции: повышайте производительность запросов и упрощайте обслуживание
  4. Использование подходящих уровней изоляции: обеспечение баланса между согласованностью и производительностью
  5. Реализация пула соединений: эффективное использование ресурсов

Соображения безопасности

  1. Принцип минимальных привилегий: предоставление минимально необходимых прав
  2. Шифруйте конфиденциальные данные: как при хранении, так и при передаче
  3. Аудит моделей доступа: мониторинг и регистрация доступа к базе данных
  4. Проверка входных данных: предотвращение атак типа «SQL-инъекция»
  5. Регулярные обновления безопасности: поддерживайте программное обеспечение базы данных в актуальном состоянии

Шаблоны построения запросов

SELECT с JOIN

-- INNER JOIN: only matching rows
SELECT o.id, c.name, o.total
FROM orders o
INNER JOIN customers c ON c.id = o.customer_id;

-- LEFT JOIN: all left rows, NULLs for non-matches
SELECT c.name, COUNT(o.id) AS order_count
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
GROUP BY c.name;

-- Self-join: hierarchical data (employees/managers)
SELECT e.name AS employee, m.name AS manager
FROM employees e
LEFT JOIN employees m ON m.id = e.manager_id;

Общие табличные выражения (CTE)

-- Recursive CTE for org chart
WITH RECURSIVE org AS (
  SELECT id, name, manager_id, 1 AS depth
  FROM employees WHERE manager_id IS NULL
  UNION ALL
  SELECT e.id, e.name, e.manager_id, o.depth + 1
  FROM employees e INNER JOIN org o ON o.id = e.manager_id
)
SELECT * FROM org ORDER BY depth, name;

Оконные функции

-- ROW_NUMBER for pagination / dedup
SELECT *, ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY created_at DESC) AS rn
FROM orders;

-- RANK with gaps, DENSE_RANK without gaps
SELECT name, score, RANK() OVER (ORDER BY score DESC) AS rank FROM leaderboard;

-- LAG/LEAD for comparing adjacent rows
SELECT date, revenue,
  revenue - LAG(revenue) OVER (ORDER BY date) AS daily_change
FROM daily_sales;

Шаблоны агрегации

-- FILTER clause (PostgreSQL) for conditional aggregation
SELECT
  COUNT(*) AS total,
  COUNT(*) FILTER (WHERE status = 'active') AS active,
  AVG(amount) FILTER (WHERE amount > 0) AS avg_positive
FROM accounts;

-- GROUPING SETS for multi-level rollups
SELECT region, product, SUM(revenue)
FROM sales
GROUP BY GROUPING SETS ((region, product), (region), ());

Шаблоны миграции

Скрипты миграции вверх/вниз

Каждая миграция должна иметь обратный вариант. Называйте файлы с префиксом, содержащим временную метку, для упорядочивания:

migrations/
├── 20260101_000001_create_users.up.sql
├── 20260101_000001_create_users.down.sql
├── 20260115_000002_add_users_email_index.up.sql
└── 20260115_000002_add_users_email_index.down.sql

Миграции без простоев (расширение/сжатие)

Используйте шаблон «расширение-сжатие», чтобы избежать блокировки или нарушения работы действующего кода:

  1. Расширение — добавление нового столбца/таблицы (с возможностью null-значений, с значением по умолчанию)
  2. Миграция данных — заполнение данных партиями; двойная запись из приложения
  3. Переход — приложение читает данные из нового столбца; прекратите запись в старый
  4. Сокращение — удаление старого столбца в последующей миграции

Стратегии заполнения данных

-- Batch update to avoid long-running locks
UPDATE users SET email_normalized = LOWER(email)
WHERE id IN (SELECT id FROM users WHERE email_normalized IS NULL LIMIT 5000);
-- Repeat in a loop until 0 rows affected

Процедуры отката

  • Всегда тестируйте down.sql в тестовой среде перед развертыванием up.sql в производственную среду
  • Сделайте окно отката коротким — если этап контракта уже выполнен, для отката потребуется новая прямая миграция
  • В случае необратимых изменений (удаление столбцов с данными) сначала создавайте логическую резервную копию

Оптимизация производительности

Стратегии индексирования

Тип индекса Пример использования Пример
B-дерево (по умолчанию) Равенство, диапазон, ORDER BY CREATE INDEX idx_users_email ON users(email);
GIN Полнотекстовый поиск, JSONB, массивы CREATE INDEX idx_docs_body ON docs USING gin(to_tsvector('english', body));
GiST Геометрия, типы диапазонов, ближайший сосед CREATE INDEX idx_locations ON places USING gist(coords);
Частичное Подмножество строк (уменьшение размера) CREATE INDEX idx_active ON users(email) WHERE active = true;
Покрывающий Сканирование только по индексу CREATE INDEX idx_cov ON orders(customer_id) INCLUDE (total, created_at);

Чтение плана EXPLAIN

EXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT) SELECT ...;

Ключевые сигналы, на которые следует обратить внимание:

  • Последовательное сканирование больших таблиц — отсутствующий индекс
  • Вложенный цикл с высокими оценками количества строк — рассмотрите возможность использования хеш-соединения или слияния, либо добавьте индекс
  • Число совместных чтений из буферов значительно превышает количество попаданий — рабочий набор превышает объем памяти

Обнаружение запросов N+1

Симптомы: приложение отправляет по одному запросу на каждую строку (например, при извлечении связанных записей в цикле).

Способы устранения:

  • Используйте JOIN или подзапроса для извлечения за один цикл
  • предварительная загрузка ORM (шаблонselect_related / includes / with)
  • шаблон DataLoader для резолверов GraphQL

пул соединений

Инструмент Протокол Идеально подходит для
PgBouncer PostgreSQL Пул транзакций/операций, низкие накладные расходы
ProxySQL MySQL Маршрутизация запросов, разделение операций чтения и записи
Встроенный пул (HikariCP, пул SQLAlchemy) Любой Пулирование на уровне приложения

Практическое правило: установите размер пула равным (2 * CPU cores) + disk spindles. Для облачных SSD-накопителей начните с 2 * vCPUs и настройте.

Реплики чтения и маршрутизация запросов

  • Направляйте все SELECT запросы на реплики; записи — на первичный
  • Учитывайте задержку репликации (обычно <1 с для асинхронной репликации, 0 для синхронной)
  • Используйте pg_last_wal_replay_lsn() для обнаружения задержки перед чтением критически важных данных

Матрица принятия решений для нескольких баз данных

Критерии PostgreSQL MySQL SQLite SQL Server
Лучше всего подходит для Сложные запросы, JSONB, расширения Веб-приложения, рабочие нагрузки с преобладанием операций чтения Встраиваемые системы, разработка/тестирование, периферийные устройства Корпоративные стеки .NET
Поддержка JSON Отлично (JSONB + GIN) Хорошая (тип JSON) Минимальная Хорошая (OPENJSON)
Репликация Потоковая, логическая Групповая репликация, кластер InnoDB Не применимо Always On AG
Лицензирование Открытый исходный код (лицензия PostgreSQL) Открытый исходный код (GPL) / коммерческое Общественное достояние Коммерческая
Максимальный практический размер Несколько ТБ несколько ТБ ~1 ТБ (один записывающий модуль) Несколько ТБ

Когда выбирать:

  • PostgreSQL — стандартный выбор для новых проектов; лучшая расширяемость и соответствие стандартам
  • MySQL — существующая экосистема MySQL; простые веб-приложения с интенсивным чтением
  • SQLite — мобильные приложения, инструменты командной строки, базы данных для модульных тестов, IoT/периферийные вычисления
  • SQL Server — требуется в соответствии с корпоративной политикой; глубокая интеграция с .NET/Azure

Аспекты, которые следует учитывать при выборе NoSQL

База данных Модель Использовать, когда
MongoDB Документ Гибкость схемы, быстрое прототипирование, управление контентом
Redis «ключ-значение» / кэш Хранение сеансов, ограничение скорости, таблицы лидеров, модель «pub/sub»
DynamoDB Широкостолбцовая Бессерверные приложения AWS, задержка в диапазоне однозначных значений в миллисекундах при любом масштабе

По умолчанию используйте SQL. Переходите на NoSQL только в тех случаях, когда это явно выгодно с точки зрения модели доступа.

Шардирование и репликация

Горизонтальное и вертикальное разбиение

  • Вертикальное разбиение: распределение столбцов по таблицам (например, разделение столбцов BLOB). Снижает нагрузку на ввод-вывод при узких запросах.
  • Горизонтальное разбиение (шардинг): распределение строк по базам данных/серверам. Требуется, когда один узел не может вместить набор данных или обработать пропускную способность.

Стратегии шардинга

Стратегия Принцип работы Преимущества Недостатки
Хеширование shard = hash(key) % N Равномерное распределение Решардинг — дорогостоящий процесс
Диапазон Разделение на шарды по дате или диапазону ID Просто, подходит для временных рядов «горячие точки» на последнем шарде
Географический Разделение на шарды по региону пользователя Локальность данных, соблюдение нормативных требований Межрегиональные запросы — сложная задача

Шаблоны репликации

Шаблон Согласованность Задержка Вариант использования
Синхронный Сильная Более высокая задержка записи Финансовые транзакции
Асинхронный В конечном итоге Низкая задержка записи Веб-приложения с интенсивным чтением
Полусинхронный Подтверждение наличия как минимум одной реплики Умеренная Баланс между безопасностью и скоростью

Ссылки

  • sql-database-assistant — написание, оптимизация и отладка запросов для повседневной работы с SQL
  • database-schema-designer — моделирование ERD, анализ нормализации и генерация схем
  • migration-architect — планирование крупномасштабной миграции между различными движками баз данных или капитального перепроектирования схем
  • senior-backend — шаблоны на уровне приложений (пул соединений, передовые практики ORM)
  • senior-devops — развертывание инфраструктуры для кластеров баз данных и реплик
Посмотреть на GitHub
---
name: database-designer
description: Design database schemas, plan data migrations, optimize queries, and model data relationships using expert analysis and automated tools.
---

# Database Designer - POWERFUL Tier Skill

## Overview

A comprehensive database design skill that provides expert-level analysis, optimization, and migration capabilities for modern database systems. This skill combines theoretical principles with practical tools to help architects and developers create scalable, performant, and maintainable database schemas.

## Core Competencies

### Schema Design & Analysis
- **Normalization Analysis**: Automated detection of normalization levels (1NF through BCNF)
- **Denormalization Strategy**: Smart recommendations for performance optimization
- **Data Type Optimization**: Identification of inappropriate types and size issues
- **Constraint Analysis**: Missing foreign keys, unique constraints, and null checks
- **Naming Convention Validation**: Consistent table and column naming patterns
- **ERD Generation**: Automatic Mermaid diagram creation from DDL

### Index Optimization
- **Index Gap Analysis**: Identification of missing indexes on foreign keys and query patterns
- **Composite Index Strategy**: Optimal column ordering for multi-column indexes
- **Index Redundancy Detection**: Elimination of overlapping and unused indexes
- **Performance Impact Modeling**: Selectivity estimation and query cost analysis
- **Index Type Selection**: B-tree, hash, partial, covering, and specialized indexes

### Migration Management
- **Zero-Downtime Migrations**: Expand-contract pattern implementation
- **Schema Evolution**: Safe column additions, deletions, and type changes
- **Data Migration Scripts**: Automated data transformation and validation
- **Rollback Strategy**: Complete reversal capabilities with validation
- **Execution Planning**: Ordered migration steps with dependency resolution

## Tool Workflow (run these — do not analyze schemas by hand)

All paths relative to this skill folder; sample inputs in `assets/`.

### 1. Analyze the schema

```bash
python3 schema_analyzer.py --input schema.sql --generate-erd --output-format json -o analysis.json
```

Accepts SQL DDL or JSON schema (`assets/sample_schema.sql` / `sample_schema.json`). Output includes normalization findings, missing constraints, naming issues, and a Mermaid ERD — show the ERD to the user and fix flagged issues before optimizing.

### 2. Optimize indexes against real query patterns

```bash
python3 index_optimizer.py --schema assets/sample_schema.json --queries assets/sample_query_patterns.json --analyze-existing --format json -o indexes.json
```

Write the user's hot queries into a query-patterns JSON first (copy `assets/sample_query_patterns.json`). Output is a priority-ordered list of CREATE INDEX recommendations plus redundant-index removals.

### 3. Generate the migration

```bash
python3 migration_generator.py --current current_schema.json --target target_schema.json --zero-downtime --format sql -o migration.sql
```

`--zero-downtime` emits an expand-contract plan; `--validate-only` checks feasibility without generating SQL.

### 4. Verification loop

Re-run step 1 on the *target* schema and assert the issues found in the first pass are gone; run `migration_generator.py --validate-only` before handing over the migration.

## Database Design Principles
→ See references/database-design-reference.md for details

## Best Practices

### Schema Design
1. **Use meaningful names**: Clear, consistent naming conventions
2. **Choose appropriate data types**: Right-sized columns for storage efficiency
3. **Define proper constraints**: Foreign keys, check constraints, unique indexes
4. **Consider future growth**: Plan for scale from the beginning
5. **Document relationships**: Clear foreign key relationships and business rules

### Performance Optimization
1. **Index strategically**: Cover common query patterns without over-indexing
2. **Monitor query performance**: Regular analysis of slow queries
3. **Partition large tables**: Improve query performance and maintenance
4. **Use appropriate isolation levels**: Balance consistency with performance
5. **Implement connection pooling**: Efficient resource utilization

### Security Considerations
1. **Principle of least privilege**: Grant minimal necessary permissions
2. **Encrypt sensitive data**: At rest and in transit
3. **Audit access patterns**: Monitor and log database access
4. **Validate inputs**: Prevent SQL injection attacks
5. **Regular security updates**: Keep database software current

## Query Generation Patterns

### SELECT with JOINs

```sql
-- INNER JOIN: only matching rows
SELECT o.id, c.name, o.total
FROM orders o
INNER JOIN customers c ON c.id = o.customer_id;

-- LEFT JOIN: all left rows, NULLs for non-matches
SELECT c.name, COUNT(o.id) AS order_count
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
GROUP BY c.name;

-- Self-join: hierarchical data (employees/managers)
SELECT e.name AS employee, m.name AS manager
FROM employees e
LEFT JOIN employees m ON m.id = e.manager_id;
```

### Common Table Expressions (CTEs)

```sql
-- Recursive CTE for org chart
WITH RECURSIVE org AS (
  SELECT id, name, manager_id, 1 AS depth
  FROM employees WHERE manager_id IS NULL
  UNION ALL
  SELECT e.id, e.name, e.manager_id, o.depth + 1
  FROM employees e INNER JOIN org o ON o.id = e.manager_id
)
SELECT * FROM org ORDER BY depth, name;
```

### Window Functions

```sql
-- ROW_NUMBER for pagination / dedup
SELECT *, ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY created_at DESC) AS rn
FROM orders;

-- RANK with gaps, DENSE_RANK without gaps
SELECT name, score, RANK() OVER (ORDER BY score DESC) AS rank FROM leaderboard;

-- LAG/LEAD for comparing adjacent rows
SELECT date, revenue,
  revenue - LAG(revenue) OVER (ORDER BY date) AS daily_change
FROM daily_sales;
```

### Aggregation Patterns

```sql
-- FILTER clause (PostgreSQL) for conditional aggregation
SELECT
  COUNT(*) AS total,
  COUNT(*) FILTER (WHERE status = 'active') AS active,
  AVG(amount) FILTER (WHERE amount > 0) AS avg_positive
FROM accounts;

-- GROUPING SETS for multi-level rollups
SELECT region, product, SUM(revenue)
FROM sales
GROUP BY GROUPING SETS ((region, product), (region), ());
```

---

## Migration Patterns

### Up/Down Migration Scripts

Every migration must have a reversible counterpart. Name files with a timestamp prefix for ordering:

```
migrations/
├── 20260101_000001_create_users.up.sql
├── 20260101_000001_create_users.down.sql
├── 20260115_000002_add_users_email_index.up.sql
└── 20260115_000002_add_users_email_index.down.sql
```

### Zero-Downtime Migrations (Expand/Contract)

Use the expand-contract pattern to avoid locking or breaking running code:

1. **Expand** — add the new column/table (nullable, with default)
2. **Migrate data** — backfill in batches; dual-write from application
3. **Transition** — application reads from new column; stop writing to old
4. **Contract** — drop old column in a follow-up migration

### Data Backfill Strategies

```sql
-- Batch update to avoid long-running locks
UPDATE users SET email_normalized = LOWER(email)
WHERE id IN (SELECT id FROM users WHERE email_normalized IS NULL LIMIT 5000);
-- Repeat in a loop until 0 rows affected
```

### Rollback Procedures

- Always test the `down.sql` in staging before deploying `up.sql` to production
- Keep rollback window short — if the contract step has run, rollback requires a new forward migration
- For irreversible changes (dropping columns with data), take a logical backup first

---

## Performance Optimization

### Indexing Strategies

| Index Type | Use Case | Example |
|------------|----------|---------|
| **B-tree** (default) | Equality, range, ORDER BY | `CREATE INDEX idx_users_email ON users(email);` |
| **GIN** | Full-text search, JSONB, arrays | `CREATE INDEX idx_docs_body ON docs USING gin(to_tsvector('english', body));` |
| **GiST** | Geometry, range types, nearest-neighbor | `CREATE INDEX idx_locations ON places USING gist(coords);` |
| **Partial** | Subset of rows (reduce size) | `CREATE INDEX idx_active ON users(email) WHERE active = true;` |
| **Covering** | Index-only scans | `CREATE INDEX idx_cov ON orders(customer_id) INCLUDE (total, created_at);` |

### EXPLAIN Plan Reading

```sql
EXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT) SELECT ...;
```

Key signals to watch:
- **Seq Scan** on large tables — missing index
- **Nested Loop** with high row estimates — consider hash/merge join or add index
- **Buffers shared read** much higher than **hit** — working set exceeds memory

### N+1 Query Detection

Symptoms: application issues one query per row (e.g., fetching related records in a loop).

Fixes:
- Use `JOIN` or subquery to fetch in one round-trip
- ORM eager loading (`select_related` / `includes` / `with`)
- DataLoader pattern for GraphQL resolvers

### Connection Pooling

| Tool | Protocol | Best For |
|------|----------|----------|
| **PgBouncer** | PostgreSQL | Transaction/statement pooling, low overhead |
| **ProxySQL** | MySQL | Query routing, read/write splitting |
| **Built-in pool** (HikariCP, SQLAlchemy pool) | Any | Application-level pooling |

**Rule of thumb:** Set pool size to `(2 * CPU cores) + disk spindles`. For cloud SSDs, start with `2 * vCPUs` and tune.

### Read Replicas and Query Routing

- Route all `SELECT` queries to replicas; writes to primary
- Account for replication lag (typically <1s for async, 0 for sync)
- Use `pg_last_wal_replay_lsn()` to detect lag before reading critical data

---

## Multi-Database Decision Matrix

| Criteria | PostgreSQL | MySQL | SQLite | SQL Server |
|----------|-----------|-------|--------|------------|
| **Best for** | Complex queries, JSONB, extensions | Web apps, read-heavy workloads | Embedded, dev/test, edge | Enterprise .NET stacks |
| **JSON support** | Excellent (JSONB + GIN) | Good (JSON type) | Minimal | Good (OPENJSON) |
| **Replication** | Streaming, logical | Group replication, InnoDB cluster | N/A | Always On AG |
| **Licensing** | Open source (PostgreSQL License) | Open source (GPL) / commercial | Public domain | Commercial |
| **Max practical size** | Multi-TB | Multi-TB | ~1 TB (single-writer) | Multi-TB |

**When to choose:**
- **PostgreSQL** — default choice for new projects; best extensibility and standards compliance
- **MySQL** — existing MySQL ecosystem; simple read-heavy web applications
- **SQLite** — mobile apps, CLI tools, unit test databases, IoT/edge
- **SQL Server** — mandated by enterprise policy; deep .NET/Azure integration

### NoSQL Considerations

| Database | Model | Use When |
|----------|-------|----------|
| **MongoDB** | Document | Schema flexibility, rapid prototyping, content management |
| **Redis** | Key-value / cache | Session store, rate limiting, leaderboards, pub/sub |
| **DynamoDB** | Wide-column | Serverless AWS apps, single-digit-ms latency at any scale |

> Use SQL as default. Reach for NoSQL only when the access pattern clearly benefits from it.

---

## Sharding & Replication

### Horizontal vs Vertical Partitioning

- **Vertical partitioning**: Split columns across tables (e.g., separate BLOB columns). Reduces I/O for narrow queries.
- **Horizontal partitioning (sharding)**: Split rows across databases/servers. Required when a single node cannot hold the dataset or handle the throughput.

### Sharding Strategies

| Strategy | How It Works | Pros | Cons |
|----------|-------------|------|------|
| **Hash** | `shard = hash(key) % N` | Even distribution | Resharding is expensive |
| **Range** | Shard by date or ID range | Simple, good for time-series | Hot spots on latest shard |
| **Geographic** | Shard by user region | Data locality, compliance | Cross-region queries are hard |

### Replication Patterns

| Pattern | Consistency | Latency | Use Case |
|---------|------------|---------|----------|
| **Synchronous** | Strong | Higher write latency | Financial transactions |
| **Asynchronous** | Eventual | Low write latency | Read-heavy web apps |
| **Semi-synchronous** | At-least-one replica confirmed | Moderate | Balance of safety and speed |

---

## Cross-References

- **sql-database-assistant** — query writing, optimization, and debugging for day-to-day SQL work
- **database-schema-designer** — ERD modeling, normalization analysis, and schema generation
- **migration-architect** — large-scale migration planning across database engines or major schema overhauls
- **senior-backend** — application-layer patterns (connection pooling, ORM best practices)
- **senior-devops** — infrastructure provisioning for database clusters and replicas

Все файлы

0 файлов

Установить database-designer

Скачайте файлы навыков и распакуйте их в каталог .claude/skills/.

Скачать ZIP

Клонируйте репозиторий и скопируйте файлы навыка в свой проект.

git clone https://github.com/alirezarezvani/claude-skills/tree/main/engineering/skills/database-designer # Copy SKILL.md to your .claude/skills/ directory

Копировать Копировать
Быстрая настройка: Скопируйте папку со скиллом в каталог .claude/skills/ Claude автоматически обнаружит и начнет использовать этот скилл
Репозиторий alirezarezvani/claude-skills

Похожие навыки

microservices-patterns
Обновлено время 29 июня 2026 г.
jpa-patterns
Обновлено время 30 июня 2026 г.
fabric-lakehouse
Обновлено время 30 июня 2026 г.
PostgreSQL Syntax Reference
Обновлено время 29 июня 2026 г.
OR